Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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
SELECT MAX(@@IDENTITY) AS LastIdOrders FROM Orders


@@IDENTITY не так работает.

Он всегда возвращает последний сгенерированый идентификатор, в не зависимости от того в какой таблице он был сгенерирован.

Делается так -
SELECT @@IDENTITY
и все.

Ответить

Номер ответа: 5
Автор ответа:
 KVU



Вопросов: 10
Ответов: 32
 Профиль | | #5 Добавлено: 06.08.08 21:15
нет id в таблицы есть, @@IDENTITY возвращает в SQL а в VB6 нет :(
может как ни будь через Execute можно?
Он Recordset не открывает

RstDirect.Open (sSQL1 & sSQL2), DataBase

отсюда такая проблема

Ответить

Номер ответа: 6
Автор ответа:
 KVU



Вопросов: 10
Ответов: 32
 Профиль | | #6 Добавлено: 06.08.08 21:22
RstDirect.Open ("SELECT MAX(@@IDENTITY) AS LastIdOrders from Orders";), DataBase


RstDirect.Open ("SELECT MAX(@@IDENTITY) AS LastIdOrders";), DataBase


RstDirect.Open ("SELECT @@IDENTITY";), DataBase


Всеравно пишет значени Null

может я не правильно объявляю переменную?

Dim RstDirect As ADODB.Recordset
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(";DSN=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
Хорошо посмотрю, спасибо.
А если есть что с ней делать.
Хотя и сейчас все работает, но нужно же ведь повышать уровень.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам