Additional
dbCAP
AnyDAC
ThinDAC
NCOCI8
Topic: Пара замечаний к 1.22
Пара замечаний к 1.22
Posted: 2005/07/29 03:58
 
UpdateSQL.

Возьмём таблицу

create table QWE (
ID int not null identity(1, 1),
NAME varchar(32) collate SQL_Latin1_General_cp1251_CI_AS not null,
constraint PK_QWE primary key clustered (ID),
constraint UNQ_QWE_NAME unique (NAME)
)

и ADQuery c с запросом
select ID, NAME from QWE
.

UpdateSQL генерит что-либо только в том случае, если он указан у кого-нибудь как UpdateObject.
В противном случае, он даже отказывается сохранять любые изменения (desing-time).
Это странно.


Мне не удалось обнаружить зависимость кода FetchRow от выбранных Refreshing Fields.

В код для MSSQL дописываются (не надёжно) терминаторы ";". Это не смертельно, но странно.

Insert SQL к запросу создаётся такой:

insert into QWE(NAME) values (:NEW_NAME)
select @@IDENTITY AS ID

При попытке вставить запись получаем (по крайней мере я получаю) "[AnyDAC][DatS]-4. No columns defined for

table.". В Insert SQL не хватает "set nocount on" в начале.

При повторных попытках добавит запись получим (уверен - все получат) "[AnyDAC][Phys][ODBC][Microsoft][ODBC

SQL Server Driver]Invalid cursor state".
Эта же ошибка будет вылезать после любой неудачной вставки (нарушение констрэйнта и т.д.).


Если переписать Insert SQL на

set nocount on
insert into QWE(NAME) values (:NEW_NAME)
select @@IDENTITY AS ID

, то вставка будет происходить, но значения поля ID останутся "секретными" 8).

После нажатия на "Get DBMS Info" UpdateSQL предлагает оба поля (ID, NAME) в Updating Fields.
Это странно - поле ID "автоинкрементное".


Другое.

Не удалось открыть в ADQuery запрос

set dateformat dmy
select ID, NAME
from QWE

и другие не запросы, содержащие больше одной команды.

RE: Пара замечаний к 1.22
Posted: 2005/07/29 14:03
 
quote:UpdateSQL генерит что-либо только в том случае, если он указан у кого-нибудь как UpdateObject
UpdateSQL работает и без датасета. Но при этом ему необходимо указать Connection или ConnectionName свойство. Но в 1.2.2 была ошибка на эту тему. Исправил.
quote:Мне не удалось обнаружить зависимость кода FetchRow от выбранных Refreshing Fields
FetchRow запрос используется для перечитывания одной записи. Например, методом TADQuery.RefreshRecord.
Поля выбранные в Refreshing Fields должны быть перечитаны после вставки/обновления.
quote:В код для MSSQL дописываются (не надёжно) терминаторы ";". Это не смертельно, но странно.
Почему странно ? Помоему, читаемость запроса увеличивается.
quote:[AnyDAC][DatS]-4
Исправил.
quote:В Insert SQL не хватает "set nocount on" в начале
Наличие или отсутствие SET NOCOUNT не является обязательным для AnyDAC, т.е. на усмотрение пользователя.
quote:Invalid cursor state
Исправил.
quote:другие не запросы, содержащие больше одной команды
Исправил.

Если необходимо, то могу выслать исправленные исходники. Спасибо за отчет !

Удачи,
Дмитрий
RE: Пара замечаний к 1.22
Posted: 2005/07/29 15:26
 
Про Refreshing Fields я не пошутил - нет чёткой зависимости (обнаружено её отсуствие) между выделенными полями и сгенерированным кодом. Я, конечно, проверю (всё-таки сутки не спал)...

>> если необходимо, то могу выслать исправленные исходники.
Было бы очень славно!