Текущий архив: 2002.04.18;
Скачать: CL | DM;
Вниз
Есть разница м/у Open и ExecSQL в ADOQuery? Найти похожие ветки
← →
Boo (2002-03-28 17:21) [0]Есть MSSQL2000, MDAC2.7 (пробовал и с другими версиями).
Делаю связку:
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add("select id, text from Table1");
ADOQuery1.Open;
DataSource1.DataSet:=ADOQuery1;
ADOQuery2.DataSource:=DataSource1;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add("Update Table1 set text="dsgvd" where id=:id");
ADOQuery2.Prepared:=True;
ADOQuery2.ExecSQL;
Дык вот. В параметр ADOQuery.Parameters[0] почему-то выдается [null] и следовательно ничего не изменяется (id - уникальное поле), т. е. значение параметра автоматом не присвается
Но! Если вместо ADOQuery2.ExecSQL; поставить ADOQuery2.Open, то прога ругается (некуда поставить курсор), но изменения в базе происходят (параметр id принимает зависимое значение)
К чему-бы енто? (и желательно - как лечится :-))
← →
Aleksandr (2002-03-28 17:29) [1]Гы... параметры всегда ручками ставятся... Енто Борланд знает, что вместо :id надо подставить параметр из списка параметров, а Transact-SQL на энто до фени...
Всего лишь одна строчка:
ADOQuery2.Parameters.ParamByName("ID").Value:=...
← →
Boo (2002-03-28 17:40) [2]Да нее... Компилятор сам создает конструкцию, которая при работе программы подставляет вместо :id - значение из ADOQuery1 (стандартная связка), только вот почему с такими параметрами Open и ExecSQL работают совершенно по-разному - ХЗ
:-)
← →
aus (2002-03-28 18:48) [3]Вроде бы должен знать компилятор, только почему-то не всегда делает то, что нужно. Вручную надежнее.
А разницу посмотри в исходниках.
← →
Shaman_Naydak (2002-03-28 20:26) [4]Да.. тут еще есть баги..
ты кстати ADOUpdate провесил ?
У меня тоже была такая фишка..
Вызывалась хранимая,возвращающая recordset (хранимая тоже хитрая, но не в ней дело)
Мне нужно было получить _Recordset.
Я сперва как всегда использовал
MyRecordset:=ADOCommand1.Execute;
И при присвоении его потом ADODataset2.Recordset:=MyRecordset
все вставало раком..
переписал первое как (использовал TADODataset вместо TADOCOmmand)
ADODataset1.Open; MyRecordset:=ADODaatset1.Recordset;
И все заработало.. разница там, что в случае Dataset"а сперва создается _Recordset, инициализируется как-то хитро, а потом вызывается _Command..
Короче,и у ADO и у борланда еще не все в порядке в этом месте
(причем, по моему, у ADO намного больше не в порядке)
← →
Boo (2002-03-28 21:32) [5]> Shaman_Naydak
У Борланда (BDE+ODBC) я видел всего 2 траблы:
1) дебильная настройка (sorry) - ODBC, потом BDE
2) при некоторых драйверах ODBC для MSSQL recordcount из принципа выдает -1, при других - string-и режутся до 250 символов
Вот и решил перейти на ADO (простота настройки - одна строка + нормальная работа с длинными строками в база), дык нет - трабла с параметрами для ExecSQL.
Кстати нашел разницу м/у Open и ExecSQL:
Open - метод TDataSet
ExecSQL - метод TADOQuery, который работает через Execute
но вот куда деваются параметры (из DataSource) - ХЗ
:-)
Страницы: 1 вся ветка
Текущий архив: 2002.04.18;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.005 c