Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Builder + ADO - вопрос


Автор: Vladus 17.1.2009, 01:16
Всем доброго времени суток.

Пытаюсь связать приложение с базой аксес(при помощи ADO). Вобщем, связать таблицу базы с билдеровским компонентом удалось- данные отображаються. Теперь хочу вставить значение в базу вот таким действием:

Код

    ADOQuery1->SQL->Add("insert into t_table (ID,f_name,s_name) values (22, 's', 'v');");
    ADOQuery1->ExecSQL();


в базу добавляеться запись, но компонент не обновляеться(а должен ли он обновиться сам или нужно мое вмещательство?). Может я использую неэффективный метод? И пожалуйста поподробнее  smile 

Заранее благодарен за любую помощ

Автор: Данкинг 17.1.2009, 02:07
Цитата(Vladus @  17.1.2009,  01:16 Найти цитируемый пост)
но компонент не обновляеться

Какой компонент - AdoTable, что ли? Ну, попробуй её переоткрыть.

Автор: Vladus 17.1.2009, 02:09
Да, компонент - AdoTable. переоткрыть пробовал - не помагает  smile 

Автор: Данкинг 17.1.2009, 02:11
Цитата(Vladus @  17.1.2009,  02:09 Найти цитируемый пост)
переоткрыть пробовал - не помагает 

Active=false/Active=true не помогает?!

Автор: Vladus 17.1.2009, 03:02
Цитата

Active=false/Active=true не помогает?!


нет, не помагает (: 

пробовал сделать вот так 

Код

ADOTable1->UpdateRecord();


получал ошибку при исполнении, что то вроде ADOTable1: Dataset not in edit or insert mode.

Автор: Данкинг 17.1.2009, 03:05
Тогда само AdoConnection попробуй переоткрыть...

Автор: Vladus 17.1.2009, 12:15
Данкинг, 

Цитата

Тогда само AdoConnection попробуй переоткрыть...


пробовал, не помагает. Использую вот такую конструкцию:
Код

    AnsiString Connect="..."//тут очень длинная строка;
    if (FileExists("db1.mdb")){
        ADOConnection1->Connected=false;
        ADOConnection1->ConnectionString=Connect;
        ADOConnection1->Connected=true;
        ADOConnection1->LoginPrompt = false;
    }
    ADOTable1->Active=False;
    ADOTable1->Active=True;

    ADOConnection1->KeepConnection = true;

Автор: Sharkfire 17.1.2009, 13:21
В таблице запись появляется ?  (проверял) ?

Автор: osmus 17.1.2009, 13:54
По идеи должно работать  ADOTable1->Refresh();

Автор: Vladus 17.1.2009, 15:15
Sharkfire, да проверял. в таблицу запись добавляется


osmus, к сожалению, не помагает. Даже пробовал сделать обновление по клику на другую кнопку - никакого результата :(

Также пробовал сделать добавление отдельной транзакцией:

Код

    ADOConnection1->BeginTrans();
    ADOQuery1->SQL->Add("insert into t_table (ID,f_name,s_name) values (105, 's', 'v');");
    ADOQuery1->ExecSQL();
       ADOConnection1->CommitTrans();


безрезультатно :(

Автор: Sharkfire 17.1.2009, 16:29
очень странно!
пробывал с другими БД\Таблицами\полями.. ?

может у тебя в запосе на вывод таблицы ошибка?
такое бывает когда делаешь пересечение таблиц

Автор: Vladus 17.1.2009, 17:06
Sharkfire,

Цитата

пробывал с другими БД\Таблицами\полями.. ?

не пробовал, а стоит?

Цитата

может у тебя в запосе на вывод таблицы ошибка?
такое бывает когда делаешь пересечение таблиц

вы меня не совсем правильно поняли. Я вытаскиваю данные из таблицы не запросом. А просто использую набор ADOConnection, ADOTable, DataSet. Связываю их друг с другом и данные сами выводяться. Если честно, я не очень понимаю принцип работы этих компонентов, потому и не могу сам найти проблему. Может вы посоветуете какой то другой способ работы, может не использовать ADO, может попытаться делать sql запросы через ADOConnection а не через ADOSQL?

Автор: Данкинг 17.1.2009, 17:21
Цитата(Vladus @  17.1.2009,  17:06 Найти цитируемый пост)
может попытаться делать sql запросы через ADOConnection а не через ADOSQL? 

Ась? smile 

Автор: Vladus 17.1.2009, 18:20
Цитата

Ась? smile 


Код

ADOConnection1->Execute(bla, bla, bla);


Я ошибся, компонент называеться не ADOSQL, а ADOQuery

Автор: Данкинг 17.1.2009, 19:38
Запросы через ADOQuery и надо делать... smile 

Автор: Dmi3ev 17.1.2009, 20:14
Vladus, как вариант, попробуй с экзешником проделать все это (не через билдер запускать). при это переоткрывай таблицу, или соединение ... так же?

Автор: Vladus 17.1.2009, 22:33
Dmi3ev

Попробовал...переоткрывал и таблицу и соединение...Никаких изменений :(

Если это принципиально, то у меня билдер 2009

Автор: Данкинг 17.1.2009, 23:00
Логически подумай: при закрытии соединения и открытии его вновь происходит подключение "заново" к базе. А в базе этой уже есть все те строчки, которые добавила программа (если они действительно добавляются, как ты говоришь). Так что, ищи, косяк где-то у тебя в коде, вероятно. smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)