Страница: 1 |
Страница: 1 |
Вопрос: VB6 + Server SQL 2000
Добавлено: 05.08.08 23:55
Автор вопроса: KVU
Здравствуйте, снова!
Мои трудности не закончились, теперь сложение
Делаю запрос вида:
Dim sSQL1 As String
Dim sSQL2 As String
sSQL1 = "INSERT INTO Orders (Orders_AddDate,Orders_Customer_ex,Orders_Date,Orders_Matl_ex,Orders_CostCustomer,Orders_Carrier_ex,Orders_Car_ex,Orders_Lpoint_ex,Orders_QuantityMatl,Orders_CostMatl,Orders_Upoint_ex,Orders_SumMatl,Orders_QuantityUpoint,Orders_CostUpoint,Orders_CostOtkat,Orders_CostFL,Orders_SumOtkat,Orders_SumCarrier,Orders_SumCustomer,Orders_SumCharges,Orders_SumDiff,Orders_SumManager,Orders_uSERS_ex)"
sSQL2 = "VALUES (" & sDate1 & Chr(44) & cboCustomer.ItemData(cboCustomer.ListIndex) & Chr(44) & sDate2 & Chr(44) & cboMatl.ItemData(cboMatl.ListIndex) & Chr(44) & stxtCostCustomer & Chr(44) & cboCarrier.ItemData(cboCarrier.ListIndex) & Chr(44) & sCar & _
Chr(44) & sLpoint & Chr(44) & sQuantityMatl & Chr(44) & sCostMatl & Chr(44) & cboUpoint.ItemData(cboUpoint.ListIndex) & Chr(44) & sSumMatl & Chr(44) & stxtQuantityUpoint & Chr(44) & stxtCostUpoint & _
Chr(44) & sCostOtkat & Chr(44) & sCostFL & Chr(44) & stxtSumOtkat & Chr(44) & stxtSumCarrier & Chr(44) & stxtSumCustomer & Chr(44) & stxtSumCharges & Chr(44) & stxtSumDiff & _
Chr(44) & stxtSumManager & Chr(44) & LoginView & ") SELECT @@IDENTITY AS IdOrders"
RstDirect.Open (sSQL1 & sSQL2), DataBase
на выводе получаю:
INSERT INTO Orders (Orders_AddDate,Orders_Customer_ex,Orders_Date,Orders_Matl_ex,
Orders_CostCustomer,Orders_Carrier_ex,Orders_Car_ex,Orders_Lpoint_ex,Orders_QuantityMatl,
Orders_CostMatl,Orders_Upoint_ex,Orders_SumMatl,Orders_QuantityUpoint,Orders_CostUpoint,
Orders_CostOtkat,Orders_CostFL,Orders_SumOtkat,Orders_SumCarrier,Orders_SumCustomer,
Orders_SumCharges,Orders_SumDiff,Orders_SumManager,Orders_uSERS_ex)
VALUES ('2008-08-05',36,'2008-08-05',30,50,9,55,30,5,50,27,250.00,50,5,0,0,0.00,250.00,2500.00,
500.00,2000.00,496.00,3) SELECT @@IDENTITY AS IdOrders
Запись в таблицу добавляется!
В SQL Query Analyzer выдает id'шку таблицы Orders
как теперь эту id'шку присвоит переменной
в VB6
Dim IdNewOrders As Integer ' Последняя id заказа
при таком раскладе не получается:
IdNewOrders = RstDirect("IdOrders").Value
Заранее, спасибо.
С уважением, Владислав.
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #1
Добавлено: 06.08.08 10:40
ИМХО, самое простое - отдельным запросом типа
SELECT MAX(@@IDENTITY) AS LastIdOrders FROM Orders
Номер ответа: 2
Автор ответа:
KVU
Вопросов: 10
Ответов: 32
Профиль | | #2
Добавлено: 06.08.08 13:11
тогда возвращает значении NULL
Номер ответа: 3
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #3
Добавлено: 06.08.08 14:06
быть того не может. Точнее, может если у тебя в таблице колонка с IDENTITY отсутствует. Но случай, как я понимаю, не такой
Номер ответа: 4
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #4
Добавлено: 06.08.08 19:43
@@IDENTITY не так работает.
Он всегда возвращает последний сгенерированый идентификатор, в не зависимости от того в какой таблице он был сгенерирован.
Делается так -
SELECT @@IDENTITY
и все.
Номер ответа: 5
Автор ответа:
KVU
Вопросов: 10
Ответов: 32
Профиль | | #5
Добавлено: 06.08.08 21:15
нет id в таблицы есть, @@IDENTITY возвращает в SQL а в VB6 нет
может как ни будь через Execute можно?
Он Recordset не открывает
отсюда такая проблема
Номер ответа: 6
Автор ответа:
KVU
Вопросов: 10
Ответов: 32
Профиль | | #6
Добавлено: 06.08.08 21:22
RstDirect.Open ("SELECT MAX(@@IDENTITY) AS LastIdOrders", DataBase
Всеравно пишет значени Null
может я не правильно объявляю переменную?
With RstDirect
.LockType = adLockOptimistic
.CursorType = adOpenKeyset
End With
Номер ответа: 7
Автор ответа:
KVU
Вопросов: 10
Ответов: 32
Профиль | | #7
Добавлено: 06.08.08 22:38
Нашел решение, всем спасибо за внимание!
Dim loConn, lsSQL, loRs
Set loConn = CreateObject("ADODB.Connection"
' Open a connection to the database
loConn.Open("SN=myDSN;UID=something;PWD=Something;"
' Insert a new record into the table
lsSQL = "INSERT INTO tMembers (MemberName) VALUES ('Manohar');" &_
"SELECT @@IDENTITY AS NewID;"
' Execute the SQL statement
Set loRs = loConn.Execute(lsSQL)
' Get the second resultset into a RecordSet object
Set loRs = loRs.NextRecordSet()
' Get the inserted ID
llID = loRs.Fields("NewID".value
' Close the connection
loConn.Close()
Set loConn = Nothing
Номер ответа: 8
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #8
Добавлено: 06.08.08 23:12
Посмотри, Есть ли метод типа ExecuteScalar
Номер ответа: 9
Автор ответа:
KVU
Вопросов: 10
Ответов: 32
Профиль | | #9
Добавлено: 06.08.08 23:35
Хорошо посмотрю, спасибо.
А если есть что с ней делать.
Хотя и сейчас все работает, но нужно же ведь повышать уровень.