Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Полуение уникального ID / 25 сообщений из 77, страница 1 из 4
18.07.2010, 19:42
    #36747205
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полуение уникального ID
Код: plaintext
1.
2.
3.
4.
INSERT INTO foo (auto,text)
    VALUES(NULL,'text'); # генерация ID вставкой NULL
INSERT INTO foo2 (id,text)
    VALUES(LAST_INSERT_ID(),'text'); # использование ID во второй таблице
по другому нельзя это сделать в mysql кто нибудь знает ?
думаю может есть вариант попроще
...
Рейтинг: 0 / 0
18.07.2010, 19:56
    #36747210
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полуение уникального ID
хороший пример
...
Рейтинг: 0 / 0
18.07.2010, 20:06
    #36747218
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полуение уникального ID
в общем проблема в том что есть 2 кнопки создание документа и сохранение документа
существует 2 таблицы документы и регистр
при создании документа заношу запись в таблицу документов
Код: plaintext
1.
2.
INSERT INTO foo (auto,text)
    VALUES(NULL,'text'); # генерация ID вставкой NULL
добавляю на форме разные услуги и хочу записать теперь все данные в таблицу регистр
Код: plaintext
1.
INSERT INTO foo2 (id,text)
    VALUES(LAST_INSERT_ID(),'text'); # использование ID во второй таблице
только вот если запись документа не пройдет, по разным причинам ,
то в таблице документов запись останется и если так будет происходить то будет много не нужных записей в таблице документов.
хотелось бы узнать как мне проверить на vb что мой запрос на запись прошел успешно?
...
Рейтинг: 0 / 0
18.07.2010, 21:39
    #36747259
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полуение уникального ID
aduka05admхотелось бы узнать как мне проверить на vb что мой запрос на запись прошел успешно?
если запрос не выполнится успешно, в VB произойдет ошибка
...
Рейтинг: 0 / 0
18.07.2010, 22:13
    #36747272
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полуение уникального ID
Shocker.Pro,
спасибо
...
Рейтинг: 0 / 0
18.07.2010, 22:16
    #36747276
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полуение уникального ID
Shocker.Pro,
aduka05admхотелось бы узнать как мне проверить на vb что мой запрос на запись прошел успешно?
все равно проблема так не решится,буду думать
...
Рейтинг: 0 / 0
19.07.2010, 00:04
    #36747334
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полуение уникального ID
aduka05adm,

а зачем ты пытаешься сохранить документ до того, как пользователь явно это захотел. Пиши все в момент сохранения - не будет этой проблемы
...
Рейтинг: 0 / 0
19.07.2010, 00:21
    #36747347
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полуение уникального ID
Shocker.Pro,
Shocker.Pro зачем ты пытаешься сохранить документ до того, как пользователь явно это захотел. Пиши все в момент сохранения - не будет этой проблемы
так и стал делать, просто хотелось чтобы было что-то НАКЛАДНАЯ10 и т.д ,решил просто НАКЛАДНАЯ оставить)
вот только че то код который я привел не работает
и на это могли бы ответить ?
...
Рейтинг: 0 / 0
19.07.2010, 00:52
    #36747366
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полуение уникального ID
aduka05adm
так и стал делать, просто хотелось чтобы было что-то НАКЛАДНАЯ10 и т.д ,решил просто НАКЛАДНАЯ оставить)
а давать номер заранее нельзя. Если второй пользователь создаст тем временем накладную 11, а первый откажется от накладной 10 - в нумерации будет дырка, а так нельзя, особенно это касается кассовых документов и фактур
...
Рейтинг: 0 / 0
19.07.2010, 01:08
    #36747368
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полуение уникального ID
Shocker.Pro,
Shocker.Proа давать номер заранее нельзя. Если второй пользователь создаст тем временем накладную 11, а первый откажется от накладной 10 - в нумерации будет дырка, а так нельзя, особенно это касается кассовых документов и фактур
вот это и смущало
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE DEFINER=`root`@`localhost` PROCEDURE `get_newid_doc`()
BEGIN
DECLARE last_id int;
INSERT INTO documents (id,name)
    VALUES(NULL,'strtemp');
set @last_id=(select last_insert_id());
select @last_id;
END
сделал так работает , надо будет щас все в одну процедуру затолкать
вторая вот
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE DEFINER=`root`@`localhost` PROCEDURE `add_to_registrusl`(in d_id BIGINT( 20 ),
in cl_id BIGINT( 20 ) ,in usl_id BIGINT( 20 ) ,in d_price INT( 7 ) ,
in d_am INT( 5 ) ,in d_date varchar( 20 ) ,in d_time varchar( 20 ))
BEGIN
insert into registr_usl (doc_id,client_id, usluga_id, price , amount,doc_date, doc_time)
values (d_id , cl_id , usl_id , d_price , d_am , d_date ,d_time);
END
и транзакцию замутить
...
Рейтинг: 0 / 0
19.07.2010, 10:19
    #36747549
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полуение уникального ID
scope_identity() для MSSQL надо юзать.
...
Рейтинг: 0 / 0
19.07.2010, 10:49
    #36747599
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полуение уникального ID
Konst_Onescope_identity() для MSSQL надо юзать.
у него MYSQL
...
Рейтинг: 0 / 0
19.07.2010, 11:01
    #36747634
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полуение уникального ID
Shocker.ProKonst_Onescope_identity() для MSSQL надо юзать.
у него MYSQL


про этот не знаю, надо смотреть документацию
...
Рейтинг: 0 / 0
19.07.2010, 11:03
    #36747637
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полуение уникального ID
Konst_Oneпро этот не знаю, надо смотреть документацию
что-то ты не проснулся
у него все есть в коде:
select last_insert_id()
...
Рейтинг: 0 / 0
19.07.2010, 11:20
    #36747672
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полуение уникального ID
Shocker.ProKonst_Oneпро этот не знаю, надо смотреть документацию
что-то ты не проснулся
у него все есть в коде:
select last_insert_id()

я подумал, что это его собственная ф-я. а транзакции присутствуют в базе MySQL? если да, то их надо юзать
...
Рейтинг: 0 / 0
19.07.2010, 11:26
    #36747685
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полуение уникального ID
> Автор: Shocker.Pro
> что-то ты не проснулся

это я наверное не проснулся :)
А что появилась какая-то штатная функция для получения ID мастер-записи при вставке деталей???
И я, как партизан, продолжаю пускать под откос поезда, несмотря на то что война закончилась?!?!?!?!?

я знаю два способа:
1) работает на MSSQL и FB
После вставки мастер-записи возвращаем на клиента ID вставленной записи. И все детали вставляем привязывая их к ID
мастера.
2)работает на FB (на MSSQL может и работает, но не знаю как предварительно получить код Identity-поля)
Получаем код мастера, от сервера. Вставляем одного мастера с полученым кодом и кучу деталей.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
19.07.2010, 11:46
    #36747743
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полуение уникального ID
Игорь Горбонос,
Игорь ГорбоносПосле вставки мастер-записи возвращаем на клиента ID вставленной записи. И все детали вставляем привязывая их к ID
мастера.
это у вас все в одной процедуре делается?
у меня также
Код: plaintext
1.
2.
3.
strsql = "CALL get_newid_doc()"
query strsql
naklnum = rs.Fields( 0 ).Value
...
Рейтинг: 0 / 0
19.07.2010, 11:53
    #36747764
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полуение уникального ID
> Автор: aduka05adm

Код, конечно другой, но в целом да
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
TEXT TO select_string noshow

INSERT INTO ...(...)

VALUES

(...)

SELECT SCOPE_IDENTITY() AS code

ENDTEXT

res = SQLExec(gnhandle, select_string, "cursor_new_code")

- это вставка мастер-записи и получение её кода, после этот код передается на клиента, где можно уже формировать
записи-детали :)

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
19.07.2010, 11:54
    #36747768
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полуение уникального ID
> Автор: Игорь Горбонос

Да, это фрагмент псевдо-кода на фокспро для MSSQL2000

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
19.07.2010, 11:56
    #36747776
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полуение уникального ID
Игорь Горбонос,
понятно спасибо
...
Рейтинг: 0 / 0
19.07.2010, 16:55
    #36748673
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полуение уникального ID
еще хотел спросить про COMMAND
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
Dim prm1, prm2, prm3, prm4, prm5, prm6, prm7
..............
Public Sub command(proc As String)
strconn = "Driver={MySQL ODBC 3.51 Driver};Server=localhost;Database=it; User=root;Password=506;Option=3;"
Set Conn = New ADODB.Connection
Conn.Open strconn
Set comm = New ADODB.command
comm.ActiveConnection = Conn
comm.CommandType =  4 
comm.CommandText = proc
End Sub
.............................
Private Sub Command12_Click()
FlexGridPlus4.FixedRows =  0 
strsql = "CALL get_newid_doc()"
query strsql
naklnum = rs.Fields( 0 ).Value
strsql = ""
command ("add_to_registrusl")
For i =  1  To FlexGridPlus4.Rows -  1 
Set prm1 = comm.CreateParameter("d_id", adBigInt, adParamInput,  20 , naklnum)
comm.Parameters.Append prm1
Set prm2 = comm.CreateParameter("cl_id", adBigInt, adParamInput,  20 , Combo1.ItemData(Combo1.ListIndex))
comm.Parameters.Append prm2
Set prm3 = comm.CreateParameter("usl_id", adBigInt, adParamInput,  20 , FlexGridPlus4.TextMatrix( 1 ,  4 ))
comm.Parameters.Append prm3
Set prm4 = comm.CreateParameter("d_price", adInteger, adParamInput,  7 , massprice(FlexGridPlus4.TextMatrix( 1 ,  4 )))
comm.Parameters.Append prm4
Set prm5 = comm.CreateParameter("d_am", adInteger, adParamInput,  5 , FlexGridPlus4.TextMatrix( 1 ,  2 ))
comm.Parameters.Append prm5
Set prm6 = comm.CreateParameter("d_date", adDBDate, adParamInput, , Text2.Text)
comm.Parameters.Append prm6
Set prm7 = comm.CreateParameter("d_time", adDBTime, adParamInput, , Text2.Text)
comm.Parameters.Append prm7
comm.Execute
FlexGridPlus4.RemoveItem  1 
Next i
FlexGridPlus4.Rows = FlexGridPlus4.Rows +  1 
FlexGridPlus4.FixedRows =  1 
Set rs = Nothing
Combo2.Visible = False
Command1.Enabled = True
Command9.Enabled = True
Command12.Enabled = False
так вот правильно ли я работаю с параметрами (не проверял хотел заранее узнать)?
еще про поля date и time хотел спросить какую длину указывать в параметре?
и еще как нормально из grid-a записывать в базу?
мой способ не очень мне нравится , так как хотелось бы потом распечатать данные из grid-a
заранее благодарю)
...
Рейтинг: 0 / 0
19.07.2010, 17:51
    #36748871
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полуение уникального ID
поправил чуть код по этому примеру
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
command ("add_to_registrusl")
Set prm = comm.Parameters
For i =  1  To FlexGridPlus4.Rows -  1 
prm.Append comm.CreateParameter("d_id", adBigInt, adParamInput,  20 , naklnum)
prm.Append comm.CreateParameter("cl_id", adBigInt, adParamInput,  20 , Combo1.ItemData(Combo1.ListIndex))
prm.Append comm.CreateParameter("usl_id", adBigInt, adParamInput,  20 , FlexGridPlus4.TextMatrix( 1 ,  4 ))
prm.Append comm.CreateParameter("d_price", adInteger, adParamInput,  7 , massprice(FlexGridPlus4.TextMatrix( 1 ,  4 )))
prm.Append comm.CreateParameter("d_am", adInteger, adParamInput,  5 , FlexGridPlus4.TextMatrix( 1 ,  2 ))
prm.Append comm.CreateParameter("d_date", adDBDate, adParamInput, , Text2.Text)
prm.Append comm.CreateParameter("d_time", adDBTime, adParamInput, , Text3.Text)
comm.Execute
FlexGridPlus4.RemoveItem  1 
Next i
работает нормально если в гриде 1 строка
а если больше то выходит такая ошибка
-2147467259[MySQL][ODBC 3.51 Driver][mysqld-5.1.38-community]Incorrect number of arguments for PROCEDURE it.add_to_registrusl; expected 7, got 14

ошибка на этой строке
Код: plaintext
comm.Execute
как правильно добавлять параметры в цикле?
...
Рейтинг: 0 / 0
19.07.2010, 17:52
    #36748874
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полуение уникального ID
а зачем вы в цикле несколько раз добавляете параметры и потом выполняете?
...
Рейтинг: 0 / 0
19.07.2010, 18:00
    #36748907
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полуение уникального ID
Konst_One,
потому что я в grid-e удаляю строки
и по первой строке указываю параметр
Код: plaintext
1.
2.
3.
4.
5.
6.
For i =  1  To FlexGridPlus4.Rows -  1 
......
prm.Append comm.CreateParameter("usl_id", adBigInt, adParamInput,  20 , FlexGridPlus4.TextMatrix( 1 ,  4 ))
..........
comm.Execute
FlexGridPlus4.RemoveItem  1 
Next i
...
Рейтинг: 0 / 0
19.07.2010, 18:04
    #36748925
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полуение уникального ID
Konst_One,
это строка добавляет параметр
Код: plaintext
prm.Append comm.CreateParameter("d_time", adDBTime, adParamInput, , Text3.Text)
это строка передает их процедуре
Код: plaintext
comm.Execute
тогда почему она их увеличивает?
по идее передавала бы себе в цикле каждый раз и нормально
каждый раз по 7 параметров
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Полуение уникального ID / 25 сообщений из 77, страница 1 из 4
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]