Форум: "Начинающим";
Текущий архив: 2006.10.01;
Скачать: [xml.tar.bz2];
ВнизКак сохранить изменения, сделанные SQL запросом. Найти похожие ветки
← →
Gorin (2006-09-13 15:03) [0]Вопрос наверное смешной:).
С помощью Query Я посылаю SQL с помощью функии ExecSQL
Query1.SQL.Text:=Memo1.Text;
Query1.ExecSQL
С помощью SQL запроса у меня добавилось в графу, к примеру, Name значение. Однако, насколько я понимаю, этот изменение надо теперь сохранить, как это сделать?
← →
Ega23 © (2006-09-13 15:04) [1]Так ты же уже всё "сохранил"?
← →
Sergey13 © (2006-09-13 15:10) [2]> [0] Gorin (13.09.06 15:03)
Если в твоих компонентах нет какого нибудь автокоммита, то commit надо сказать явно.
← →
Gorin (2006-09-13 15:15) [3]То есть если я послал SQL запрос INSERT INTO base (Name) VALUES ("vasya") то это уже сохранено в базе данных? Просто, скажем после закрытия Delphi, а через некоторое время повторного открытия база данных была чиста.
← →
Gorin (2006-09-13 15:19) [4]То есть выглядеть должно так
Query1.SQL.Text:=Memo1.Text;
Query1.ExecSQL;
Query1.CommitUpdates;
?
← →
Sergey13 © (2006-09-13 15:26) [5]Database1.Commit;
← →
MsGuns © (2006-09-13 15:29) [6]>Gorin (13.09.06 15:15) [3]
>То есть если я послал SQL запрос INSERT INTO base (Name) VALUES ("vasya") то это уже сохранено в базе данных?
В общем случае - нет. Конкретно - зависит от типа СУБД, компонент доступа, опций соединения, буферизации изменений и т.д.
>Просто, скажем после закрытия Delphi, а через некоторое время повторного открытия база данных была чиста.
Транзакция была не подтверждена либо "клиент" не "удосужился" явно послать изменения на "сервер".
← →
Gorin (2006-09-13 15:40) [7]Спасибо.
То есть использование компонента DataBase необходимо? Просто у меня только Query и DataSource.
И еще вопросик. У меня DBGrid1 связан с DataSource1 а он, соотвественно с Query1. Query1 содержит запрос на вывод всей базы данных. Так же на форме расположен Datasource2 и Query2 и Memo1, с помощью них я формирую динамические запросы. Соотвественно если я с помощью Query2 добавляю запись то в DBGrid1 она не обновляется. Я обновляюDataSource1.Active:=false;
DataSource1.Active:=true;
Наверно это не правильно? Как правильно обновить DBGrid?
← →
MsGuns © (2006-09-13 15:55) [8]>Gorin (13.09.06 15:40) [7]
Обновлять нужно не DataSource (он является простым посредником между расположенной в ОП информацией, представляющей совокупность записей, полученных некоторым образом извне, и, если упрощенно, двухмерным строковым массивом, представляющим то, что можно отобразить в текущей матрице сетки (грида) и тем более не грид.
Для получения "свежих" данных их хранилища (БД) запрос надо переоткрыть. Сделать это можно явно либо неявно в зависмости от используемых компонент доступа. В BDE есть только первый способ.
Т.е. схема интерфейса такова:
1. Прочитал данные
2. Изменил на "клиенте" с помощью интерфейса
3. Записал эти изменения в "базу" (только Post не пишет в общем случае, надо еще управлять буферизацией, учитывать параметры объекта централизации соединения и его параметы (TDataBase и TSession соответственн для BDE)
4. Перечитал данные.
4 пункт особенно важен с двух сторон: во-первых убедиться в том, что изменения зафиксированы в БД, а во вторых, чтобы организовать интерактивный доступ к БД нескольких пользователей (конкурентов)
← →
MsGuns © (2006-09-13 15:56) [9]>Sergey13 © (13.09.06 15:26) [5]
>Database1.Commit;
"Катит" только для серверных СУБД. У него же, гадом буду, что-нибудь локальное. Типа парадокса ;)
← →
Sergey13 © (2006-09-13 15:58) [10]> [7] Gorin (13.09.06 15:40)
> То есть использование компонента DataBase необходимо?
Желательно. В принципе можно и отдельный запрос послать с одним словом commit.
> Так же на форме расположен Datasource2
> и Query2 и Memo1, с помощью них я формирую динамические
> запросы.
Datasource2 тут скорее всего лишний, если Query2 не вщзвращает записей.
> Соотвественно если я с помощью Query2 добавляю
> запись то в DBGrid1 она не обновляется.
Это нормально.
> Я обновляю DataSource1.Active:=false;
> DataSource1.Active:=true;
> Наверно это не правильно?
Это правильно. Просто ты ошибся тут
> Query1 содержит запрос на вывод всей базы данных.
Не надо так делать. Ограничивай запрос нужными критериями.
> Как правильно обновить DBGrid?
Можно вообще ничего не обновлять, если работать методами датасета insert, edit и т.д. Если через отдельный запрос - то только так.
← →
Gorin (2006-09-13 16:12) [11]У меня Paradox :)
Так в результате я слегка запутался.
Достаточно ли компонентов Query И Datasource?
И нужно ли мне явно подтверждать запрос, если да то как?
← →
MsGuns © (2006-09-13 16:21) [12]>Gorin (13.09.06 16:12) [11]
>У меня Paradox :)
Если есть хоть малейшая возможность выбора - бегите от него. Как их от людых других "локалок" типа фокса, дибэйза и т.д.
>Так в результате я слегка запутался.
>Достаточно ли компонентов Query И Datasource?
>И нужно ли мне явно подтверждать запрос, если да то как?
Сложно в двух словах рассказать тут принципы построения в дельфи обмена с БД. Советую пока бросить "кидать компоненты", а попытаться разобраться в механизме работы СУБД и компонент доступа (для парадокс+BDE - это классы TSession, TDataBase, TTable, TQuery, TUpdateObject), их взаимодействия и взаимодополнения.
Встроенный хэлп у Борланда прекрасен
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.10.01;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.012 c