Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TADOQuery и вставка [D6, Access]


Palladin ©   (2003-02-26 10:37:00) 

вот столкнулся с такой проблемой

ADOQIns.SQL.Text:="insert into table1 select blabla from blabla"
ADOQIns.ExecSQL;

после сразу идет следующее

ADOQSel.SQL.Text:="select * from table";
ADOQSel.Open;

Recordset пустой...
бегу в сам Access в таблица не пустая...
я так понял, что видимо данные посылаются в отдельном потоке и на
момент ADOQSel.Open транзакция еще не завершилась, потому что сделал задержку и Recordset заполнился...
что делать?
как дождатся завершения транзакции ADOQIns.ExecSQL?


Palladin   (2003-02-26 12:24:00) [1]

:))


sniknik   (2003-02-26 12:21:00) [2]

> кстати ODBC меня не подводил еще...

:-))

все бывает в первый раз, вот оно и случилось.


Palladin   (2003-02-26 12:17:00) [3]

Точно. После комбинации этих двух все отработало прекрасно.
Спасибо!


sniknik   (2003-02-26 12:09:00) [4]

> в общем access не внял begin transaction и commit transaction
сказал что SQL ему надо...

то есть не понимает "begin transaction"? но это может быть только на старых версиях. небось база Access 97? или jet старый?

а попробуй комбинацию, мою строку и begin transaction, поймет?


Palladin   (2003-02-26 12:03:00) [5]

в общем access не внял begin transaction и commit transaction
сказал что SQL ему надо...

присвоение уже делал не чего подобного...

с приведенной строкой такая же трабла... проскальзывает прога дальше и все...
кстати ODBC меня не подводил еще...


sniknik   (2003-02-26 11:55:00) [6]

Palladin © (26.02.03 11:50)
нафига? ODBC - шное подключение, не раз глюки выдавало

попробуй с этим

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/Program Files/TB/Database/address.mdb;Persist Security Info=False


Palladin   (2003-02-26 11:53:00) [7]

ok ща...


sniknik   (2003-02-26 11:52:00) [8]

проверь всеже ExecuteOptions, или просто сделай присвоение перед выполнением
ADOQIns.ExecuteOptions := [];


Palladin   (2003-02-26 11:50:00) [9]

ConnectionString у обоих Query такой
"DBQ=D:/Program Files/TB/Database/address.mdb;Driver={Microsoft Access Driver (*.mdb)};"


sniknik   (2003-02-26 11:50:00) [10]

кстати если думаеш что это от незавершонной транзакции, то завершай ее сам. получится так

ADOQIns.SQL.Text:="BEGIN TRANSACTION";
ADOQIns.ExecSQL;
ADOQIns.SQL.Text:="insert into table1 select blabla from blabla";
ADOQIns.ExecSQL;
ADOQIns.SQL.Text:="COMMIT TRANSACTION";
ADOQIns.ExecSQL;


после сразу идет следующее

ADOQSel.SQL.Text:="select * from table";
ADOQSel.Open;


попробуй.


Palladin   (2003-02-26 11:48:00) [11]

щаз проверил и действительно программа выполняется дальше ExecSQL, независимо от того проведена транзакция или нет...


sniknik   (2003-02-26 11:38:00) [12]

Palladin © (26.02.03 11:13)
два показательных параметра подключения
Jet OLEDB:Exclusive Async Delay
Jet OLEDB:Shared Async Delay

нет это у тебя не получилось.

а с основным вопросом чтото не то. я делал примерно так и все срабатывало, правда для инсерта я использовал ADOCommand а для получения ADORecordSet но принцип не меняется.


Palladin   (2003-02-26 11:13:00) [13]


> sniknik © (26.02.03 11:06)

нет не SQL.Add, sql.text...
Access не поддерживает асинхронное выполнение... по крайней мере у меня выдавал Exception при попытке установить...

оба TADOQeury создаются в run-time...


Palladin   (2003-02-26 11:09:00) [14]

И вообще :)
Все имена в приведенном выше коде вымышленные...
проблема в том что не могу оперативно в одном TADOQuery провести insert запрос и сразу же после ExecSQL выбрать в другом TADOQuery...


sniknik   (2003-02-26 11:06:00) [15]

Она завершается по ходу, если только не стоит в опциях асинхронное выполнение. Проверь.
И еще если здесь писал а в проге может SQL.Add используеш то тоже к этому приведет.


Palladin   (2003-02-26 10:48:00) [16]

писал здесь и поэтому недописал "1"
ADOQSel.SQL.Text:="select * from table1";


stone   (2003-02-26 10:43:00) [17]


> ADOQIns.SQL.Text:="insert into table1select blabla from
> blabla"
> ADOQIns.ExecSQL;
>
> после сразу идет следующее
>
> ADOQSel.SQL.Text:="select * from table";
> ADOQSel.Open;


Наверх

Титульная страница Поиск, карта сайта Написать письмо