DVV |
Отправлено: 27.02.2005, 10:58 |
|
Не зарегистрирован
|
База банных MySQL.
Создаем на форме компонент TADOQuery1 и TButton1. В cобытии последнего прописываем код:
ADOQuery1->ConnectionString="Provider=MSDASQL.1;Persist Security Info=False;Data Source=Factory";
ADOQuery1->SQL->Text="select * from steel";
ADOQuery1->Open();
ADOQuery1->SQL->Text="Insert into steel (name) values ('Сталь 40х')";
ADOQuery1->ExecSQL();
На последней строке программа вылетает по AccessViolation . . . в msado15.dll
На базе MSAccess происходит тоже самое. Первый способ победить это я нашел такой:
Вместо последней строки написать это:
TADOQuery* ADOQuery=new TADOQuery(NULL);
ADOQuery->ConnectionString=ADOQuery1->ConnectionString;
ADOQuery->SQL->Text=ADOQuery1->SQL->Text;
ADOQuery->ExecSQL();
delete ADOQuery;
Слишкол громоздко!
Если работать с приличными серверами напр. MSSQL то последние две строки можно написать так:
ADOQuery1->SQL->Text="Insert into steel (name) values ('Сталь 40х'); Select 0;";
ADOQuery1->Open();
И это сработает.
Но MySQL, к сожалению, не выполняет два запроса подряд.
Может есть другие пути решения этой проблемы?
|
|
xim |
Отправлено: 27.02.2005, 15:29 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 143
|
Исключение возникает из-за попытки выполнить вставку записи уже открытым ADOQuery1.
Почему не используется ADOConnection? Зачем менять SQL->Text у ADOQuery1?
Добавляем ADOCommand. Если не использовать ADOConnection:
CODE |
ADOQuery1->ConnectionString="Provider=MSDASQL.1;Persist Security Info=False;Data Source=Factory";
ADOQuery1->SQL->Text="select * from steel";
ADOQuery1->Open();
ADOCommand1->ConnectionString=ADOQuery1->ConnectionString;
ADOCommand1->CommandText="Insert into steel (name) values ('Сталь 40х')";
ADOCommand1->Execute();
|
|
|
DVV |
Отправлено: 27.02.2005, 16:47 |
|
Не зарегистрирован
|
QUOTE (xim @ 27/02/2005, 15:29) | CODE |
ADOCommand1->Execute();
|
|
Точно, все получилось!
Кстати открытый запрос тут ни при чем. Во первых, когда я пишу ADOQuery1->SQL->Text="select * from steel"; т.е. изменяю свойство SQL, ADOQuery1 автоматически закрывается. Во вторых, я уже об этом думал, и пробовал принудительно закрывать ADOQuery1. Не помогает.
ADOConnection я не использовал только в конференции, что бы упростить код.
Спасибо! |
|