![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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;