Главная страница
    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.011 c
2-1157723033
random(128)
2006-09-08 17:43
2006.10.01
HashLib! v1.03 и т.д.


6-1136400410
serko
2006-01-04 21:46
2006.10.01
Отправка SMS


2-1157789782
VlD86
2006-09-09 12:16
2006.10.01
TListBox.Tag


15-1157781176
syte_ser78
2006-09-09 09:52
2006.10.01
непонятное поведение sql запроса


1-1156342131
Sam Stone
2006-08-23 18:08
2006.10.01
CoUnInitialize()





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский