powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Полуение уникального ID
25 сообщений из 77, страница 1 из 4
Полуение уникального ID
    #36747205
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Полуение уникального ID
    #36747210
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хороший пример
...
Рейтинг: 0 / 0
Полуение уникального ID
    #36747218
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в общем проблема в том что есть 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
Полуение уникального ID
    #36747259
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admхотелось бы узнать как мне проверить на vb что мой запрос на запись прошел успешно?
если запрос не выполнится успешно, в VB произойдет ошибка
...
Рейтинг: 0 / 0
Полуение уникального ID
    #36747272
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
спасибо
...
Рейтинг: 0 / 0
Полуение уникального ID
    #36747276
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
aduka05admхотелось бы узнать как мне проверить на vb что мой запрос на запись прошел успешно?
все равно проблема так не решится,буду думать
...
Рейтинг: 0 / 0
Полуение уникального ID
    #36747334
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05adm,

а зачем ты пытаешься сохранить документ до того, как пользователь явно это захотел. Пиши все в момент сохранения - не будет этой проблемы
...
Рейтинг: 0 / 0
Полуение уникального ID
    #36747347
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Shocker.Pro зачем ты пытаешься сохранить документ до того, как пользователь явно это захотел. Пиши все в момент сохранения - не будет этой проблемы
так и стал делать, просто хотелось чтобы было что-то НАКЛАДНАЯ10 и т.д ,решил просто НАКЛАДНАЯ оставить)
вот только че то код который я привел не работает
и на это могли бы ответить ?
...
Рейтинг: 0 / 0
Полуение уникального ID
    #36747366
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05adm
так и стал делать, просто хотелось чтобы было что-то НАКЛАДНАЯ10 и т.д ,решил просто НАКЛАДНАЯ оставить)
а давать номер заранее нельзя. Если второй пользователь создаст тем временем накладную 11, а первый откажется от накладной 10 - в нумерации будет дырка, а так нельзя, особенно это касается кассовых документов и фактур
...
Рейтинг: 0 / 0
Полуение уникального ID
    #36747368
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Полуение уникального ID
    #36747549
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scope_identity() для MSSQL надо юзать.
...
Рейтинг: 0 / 0
Полуение уникального ID
    #36747599
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Onescope_identity() для MSSQL надо юзать.
у него MYSQL
...
Рейтинг: 0 / 0
Полуение уникального ID
    #36747634
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProKonst_Onescope_identity() для MSSQL надо юзать.
у него MYSQL


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

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

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

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


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

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

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Полуение уникального ID
    #36747776
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос,
понятно спасибо
...
Рейтинг: 0 / 0
Полуение уникального ID
    #36748673
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще хотел спросить про 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
Полуение уникального ID
    #36748871
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поправил чуть код по этому примеру
Код: 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
Полуение уникального ID
    #36748874
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а зачем вы в цикле несколько раз добавляете параметры и потом выполняете?
...
Рейтинг: 0 / 0
Полуение уникального ID
    #36748907
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Полуение уникального ID
    #36748925
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One,
это строка добавляет параметр
Код: plaintext
prm.Append comm.CreateParameter("d_time", adDBTime, adParamInput, , Text3.Text)
это строка передает их процедуре
Код: plaintext
comm.Execute
тогда почему она их увеличивает?
по идее передавала бы себе в цикле каждый раз и нормально
каждый раз по 7 параметров
...
Рейтинг: 0 / 0
25 сообщений из 77, страница 1 из 4
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Полуение уникального ID
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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