Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1157880067
YOjik
2006-09-10 13:21
2006.10.01
Как правильно передать указатель на объект


15-1157865825
vikont_semenov
2006-09-10 09:23
2006.10.01
От студента


2-1158157304
X_Tra
2006-09-13 18:21
2006.10.01
Double/int на c++ и соответствующие типы в D7


15-1157662081
Offtoper
2006-09-08 00:48
2006.10.01
Просто оффтоп


15-1157667031
SerJaNT
2006-09-08 02:10
2006.10.01
Новая версия jViewer 1.1 - Зацените!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский