Форум: "Начинающим";
Текущий архив: 2010.02.07;
Скачать: [xml.tar.bz2];
ВнизDBGrid и Access. Не обновляет Найти похожие ветки
← →
k0ks (2009-12-10 18:23) [0]Решил попробовать связать Delphi и Access (ADOConnection, ADOQuery, DATASource, DBGrid). Почему после добавления данных через Query (INSERT INTO USERS (NAME) VALUES (:PNAME);) в DBGrid они не появляются? Для обновленя ADOQuery1 (SELECT FROM USERS) пробовал ADOQuery1.close\open, ADOQuery.Active:=false\true. Но результата это не дало. Получилось только с использованием таймера на 4 секунды (3 уже не обновляет), что очень не удобно. Причем когда связывал с базой SQL все отлично обновлялось сразу же
← →
clickmaker © (2009-12-10 18:57) [1]фрагмент кода от добавления до переоткрытия?
← →
sniknik © (2009-12-10 19:04) [2]лучше фрагмент (план?) использования ADOConnection ...
т.к.
> Получилось только с использованием таймера на 4 секунды
выглядит так что он у всех (вставляющего и читающего) компонентов разный.
и... сколько можно повторять не пользуйтесь ADOQuery... блин, есть же родные для идеологии ADO ADOCommand и ADODataSet.
← →
k0ks (2009-12-10 19:08) [3]procedure TForm1.BitBtn2Click(Sender: TObject);
begin
DM.ADOConnection1.BeginTrans; // начать транзакцию
ADOQuery2.Parameters.ParamByName("PName").Value:=Edit1.Text;
ADOQuery2.Parameters.ParamByName("PDol").Value:=Combobox1.Text;
ADOQuery2.Parameters.ParamByName("PSector").Value:=Combobox2.Text;
try
ADOQuery2.ExecSQL;
except
ShowMessage("Ошибка при добавлении данных!,"+#13+
"Попробуйте еще раз!");
{откатываем изменение}
DM.ADOConnection1.RollbackTrans;
exit;
end;
DM.ADOConnection1.CommitTrans;
ADOTable1.Active:=false;
ADOTable1.Active:=true;
Timer1.Interval := 4000;
Timer1.Enabled := True;
end;
← →
Медвежонок Пятачок © (2009-12-10 19:13) [4]а если коммит обломается, то исключения нам пофик.
хотя к эффекту задержки это конечно не относится.
плюс: начинаем транзакцию перед работой с параметрами.
а если там вдруг исключение, то надеемся что пушкин разберется с начатой транзакцией за нас
← →
k0ks (2009-12-10 19:18) [5]Да обработчик пока не писал. не до этого. 2 дня сижу с этой бедой. с таймером вообще не красиво, пришлось даже прогресс бар запихнуть. Сейчас на практике на АЭС, так вот нужно мелкую прожку написать. Уже и другой компонент вставлял (JVDBGrid) и на другой машине с delphi 2006 запускал. ничего
← →
Медвежонок Пятачок © (2009-12-10 19:19) [6]про аэс - это нам страшная сказка на ночь?
← →
k0ks (2009-12-10 19:27) [7]это про то, что проблему решить надо помочь
← →
Медвежонок Пятачок © (2009-12-10 19:29) [8]ну для начала начни применять советы которые уже здесь есть.
про адокомманд и адодатасет
← →
Медвежонок Пятачок © (2009-12-10 19:33) [9]заодно открывай тайну какой провайдер акцесса у тебя используется
← →
k0ks (2009-12-10 19:34) [10]>выглядит так что он у всех (вставляющего и читающего) компонентов разный.
Всё правильно. Читающий ADOQuery1 подключен напрямую через ConnectionString. ADOQuery2 через ADOConnection1 на модуле (DM). Datasource->ADOQuery1, DBGrid->DataSource
← →
sniknik © (2009-12-10 19:34) [11]еще и ADOTable1.... ЖУТЬ!
> это про то, что проблему решить надо помочь
может наоборот? не справишься и глядишь настоящего программиста пригласят... и катастрофы не произойдет. а иначе придется брать красную монтировку, от хедкрабов отбиваться...
← →
k0ks (2009-12-10 19:34) [12]Microsoft Jet4
← →
Медвежонок Пятачок © (2009-12-10 19:36) [13]Всё правильно. Читающий ADOQuery1 подключен напрямую через ConnectionString. ADOQuery2 через ADOConnection1 на модуле (DM). Datasource->ADOQuery1, DBGrid->DataSource
ну вот. исправляй свое "правильно" на совсем правильно.
один коннекшен на всех.
один адокомманд на инсерт.
один адодатасет на селект
← →
k0ks (2009-12-10 19:36) [14]
> может наоборот? не справишься и глядишь настоящего программиста
> пригласят... и катастрофы не произойдет. а иначе придется
> брать красную монтировку, от хедкрабов отбиваться...
Давайте по теме. Это мать попросила написать для нее, а для меня - это скоротать время. И отдел поддержки пользователей программированием не занимаеся.
← →
sniknik © (2009-12-10 19:37) [15]>> выглядит так что он у всех (вставляющего и читающего) компонентов разный.
> Всё правильно.
ну и чего ты хочешь тогда? все правильно, разные объекты = разный кеш буфер = пока один на диск не сольет, а другой не перечитает → разные данные.
← →
k0ks (2009-12-10 19:38) [16]
> один коннекшен на всех.
> один адокомманд на инсерт.
> один адодатасет на селект
И так. про канекшн. Как именно? ведь если не использовать ConnectionString для Query1 то DataSource его не увидит.
← →
sniknik © (2009-12-10 19:38) [17]> Давайте по теме.
по теме тебе давно уже дали... не тормози! примени!
← →
Медвежонок Пятачок © (2009-12-10 19:39) [18]это называется резервирование.
на АЭС иначе нельзя.
по отдельному коннекту на каждый чих
← →
k0ks (2009-12-10 19:40) [19]все понял. спасибо всем
← →
k0ks (2009-12-10 19:41) [20]да там программа 2 строчки 3 запроса. просто всегда делал с sql 2000 и проблем не возникало. но тут увы, сервер не поставишь
← →
Медвежонок Пятачок © (2009-12-10 19:42) [21]Уфф...
"Кекс, кажется я спас мир. Два раза"
/* персонаж "Укроп". сериал "Даешь Молодешь" */
← →
k0ks (2009-12-10 19:44) [22]неа. ты меня спас! Спасиб
← →
Anatoly Podgoretsky © (2009-12-10 19:53) [23]
> это про то, что проблему решить надо помочь
Ни в коем случае, и так уже страшно.
Какой еще
DM.ADOConnection1.CommitTrans;
в данном месте.
Какой еще ADOTable1
Какой еще Timer1
Проходи практику без компьютера, можешь руководству сказать, что на ДМ запретили.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.02.07;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.004 c