Topic: GetLastAutoGenValue и MSSQL200
|
|
ak
User
 Expert Boarder
| Posts: 72 |   | Karma: 2 |
|
Re:GetLastAutoGenValue и MSSQL200
|
|
Posted: 2007/08/09 08:49 |
|
|
|
|
Diman wrote: ADExecutor разбивает это на две команды = два батча. А почему это не работает как две команды? EMS SQL Manager выполняет 2 команды и не кашляет.
|
|
Diman
Admin
 Admin
| Posts: 1470 |  | Karma: 18 |
|
Re:GetLastAutoGenValue и MSSQL200
|
|
Posted: 2007/08/09 11:50 |
|
|
|
|
1) Касательно UPDATE и изменения BLOB - уже исправлено в 2.0 коде. 2) > А почему это не работает как две команды? Вы меня не поняли. Выполнить две команды по очереди, каждая своим ExecSQL / Open, и выполнить их одним батчем, один ExecSQL / Open, это две большие разницы для MSSQL. Прочтите в MSSQL BOL раздел "batches, overview".
|
|
ak
User
 Expert Boarder
| Posts: 72 |   | Karma: 2 |
|
Re:GetLastAutoGenValue и MSSQL200
|
|
Posted: 2007/08/10 00:21 |
|
|
|
|
1) Касательно UPDATE и изменения BLOB - уже исправлено в 2.0 коде.Радует. А что можно сделать с существующим кодом?
2) > А почему это не работает как две команды? Вы меня не поняли. Выполнить две команды по очереди, каждая своим ExecSQL / Open, и выполнить их одним батчем, один ExecSQL / Open, это две большие разницы для MSSQL. Прочтите в MSSQL BOL раздел "batches, overview". Понял. В описании SCOPE_IDENTITY объясняется, что такое "the same scope".
|
|
Diman
Admin
 Admin
| Posts: 1470 |  | Karma: 18 |
|
Re:GetLastAutoGenValue и MSSQL200
|
|
Posted: 2007/08/10 00:47 |
|
|
|
|
Для починки работы с блобами, замените одноименную процедуру на следующий текст:
function TODBCVariable.GetDataPtr(AIndex: SQLUInteger; out ApData: SQLPointer;
out ASize: SQLInteger; out ApInd: PSQLInteger): PSQLPointer;
begin
ASSERT((FList <> nil) and (FList.FBuffer <> nil));
FList.FBuffer.GetDataPtr(Self, AIndex, SQLPointer(Result), ApInd);
if PSQLUInteger(ApInd)^ = SQL_NULL_DATA then
ASize := 0
else
ASize := PSQLUInteger(ApInd)^;
if LongData then begin
ASSERT((ASize <= SQL_LEN_DATA_AT_EXEC_OFFSET) or (ASize >= 0));
ApData := Result^;
if ApData = nil then
ASize := 0
else if ASize <= SQL_LEN_DATA_AT_EXEC_OFFSET then
ASize := SQL_LEN_DATA_AT_EXEC_OFFSET - ASize;
end
else
ApData := Result;
ASSERT((Result <> nil) and (ASize >= 0));
end;
|
Предыдущая версия не пропускала блобы с нулевой длиной, но отличные от Null.
|
|
ak
User
 Expert Boarder
| Posts: 72 |   | Karma: 2 |
|
Re:GetLastAutoGenValue и MSSQL200
|
|
Posted: 2007/08/10 01:10 |
|
|
|
|
|
Спасибо. Кажется заработало. А как там дела с монитором?
|
|
|