Помогите подключиться к FireBird
Модератор: Модераторы
Помогите подключиться к FireBird
Подключаюсь с помощью IBConnection, после соеденения данные появляются в DBGrid, но новые данные не вводятся в базу данных.
В TSQLQuery ->UpdateSQL (TStringList), TSQLQuery ->InsertSQL (TStringList), TSQLQuery ->DeleteSQL (TStringList) сами запросы есть? На добавление, обновление, удаление? Если нет, то конечно ничего добавляться, изменяться и удаляться не будет. 
Нет этих запросов нет. Есть только запрос в свойстве SQL. Можно уточнить какие ставить запросы в свойствах InsetSQL DeleteSQL UpdeteSQL, что бы интерактивно изменять данные в DBGrid. И вообще как эти свойства работают.
ElfElf
Если у Вас запрос простой, типа "SELECT поле1, поле2 FROM таблица", то то изменения в DBGrid и так будут работать. Если же запрос более сложный, например многотабличный (типа @SELECT т1.поле1, т2.поле2 FROM таблица1 т1 INNER JOIN таблица2 т2 ON условие объединения"), тогда для каждого из действий над данными придётся объявлять свой собственный запрос:
- для удаления строки данных - в свойстве DeleteSQL - "DELETE FROM таблица WHERE id=ключевое значение",
- для изменения строки данных - свойство UpdateSQL - "UPDATE таблица SET конкретное_поле = значение WHERE id=ключевое значение"?
- для добавления новой строки данных - свойство InsertSQL - "INSERT INTO таблица (поле) VALUES (значение поля)"
Если у Вас запрос простой, типа "SELECT поле1, поле2 FROM таблица", то то изменения в DBGrid и так будут работать. Если же запрос более сложный, например многотабличный (типа @SELECT т1.поле1, т2.поле2 FROM таблица1 т1 INNER JOIN таблица2 т2 ON условие объединения"), тогда для каждого из действий над данными придётся объявлять свой собственный запрос:
- для удаления строки данных - в свойстве DeleteSQL - "DELETE FROM таблица WHERE id=ключевое значение",
- для изменения строки данных - свойство UpdateSQL - "UPDATE таблица SET конкретное_поле = значение WHERE id=ключевое значение"?
- для добавления новой строки данных - свойство InsertSQL - "INSERT INTO таблица (поле) VALUES (значение поля)"
М-да... Ни чего не понятно
1) Если в свойстве SQL простой запрос на выборку SELECT * From MyTable, а свойства InsertSQL, UpdateSQL, DeletaSQL оставить пустыми то в DBGrid нтерактивно будут изменяться и добавляться данные в базе данных? У меня не изменяются и не добавляются.
2) Если в свойствах InsertSQL, UpdateSQL, DeletaSQL должны быть запросы, то какие для интерактивного изменения данных в DBGrid и соответственно в базе данных.
Может я чего не понимаю...
1) Если в свойстве SQL простой запрос на выборку SELECT * From MyTable, а свойства InsertSQL, UpdateSQL, DeletaSQL оставить пустыми то в DBGrid нтерактивно будут изменяться и добавляться данные в базе данных? У меня не изменяются и не добавляются.
2) Если в свойствах InsertSQL, UpdateSQL, DeletaSQL должны быть запросы, то какие для интерактивного изменения данных в DBGrid и соответственно в базе данных.
Может я чего не понимаю...
ElfElf писал(а):Может я чего не понимаю...
Это заметно.
Образование должно быть систематическим и последовательным, как постройка дома. В этом случае есть шанс, что дом будет прочным, а любые данные, которые Вы получаете - понятными. У Вас налицо попытка понять работу с данными, используя SQL-сервер, с помощью программирования. Это неправильно, поэтому Вы ничего не понимаете.
Давайте Вы, для начала (или, говоря иными словами, для прочного фундамента) прочтёте какую-нибудь книжку по работе с SQL базами данных без привязки к языку программирования и только потом уже переключитесь на реализацию работы с данными с помощью языка программирования.
Для начала поизучайте вот это:
- http://www.intuit.ru/department/database/sqlmdintro/
- http://www.intuit.ru/department/database/sql/
Для этого Вам нужен сервер БД (он у Вас уже есть и называется FireBird) и любая программа-клиент, например идущая в комплекте с FireBird программа isql.
После того, как Вы на практике освоите для чего нужны те или иные запросы манипулирующие данными, можно будет приступать к решению Вашей задачи с помощью языка программирования.
------------
А конкретно по Вашей проблеме - вполне возможно, что у Вас не подтверждаются транзакции. Но это всё гадание на кофейной гуще, т.к. что там написано у Вас в программе никто не знает, а Вы об этом сообщать почему-то не торопитесь.
В моей программе ничего нет - на форме 6 компонентов IBConection DBGrid SQLQuery Datasource SQLTransaction DBNavigator - всё связано друг с другом свойство SQLTransaction.Action - caCommit . Цель программы чисто учебная посмотреть как происходит подключение к базе данных. База данных создана IBExpert одна таблица несколько записей. Я не программист - просто любитель.
Вопрос заданный мной уже встречался на форуме, но ответа (почему и что делать) к сожалению не было...
Спасибо за сылки посмотрю...
Вопрос заданный мной уже встречался на форуме, но ответа (почему и что делать) к сожалению не было...
Спасибо за сылки посмотрю...
Очень кратко, для совсем простых действий.
InsertSQL - вставка записи. Запрос примерно такой ('insert into TABLICA (POLE_A,POLE_B) values (:POLE_A,:POLE_B)') - запросы параметрические. Параметры и будут поля Вашей таблицы, которая проецируется в гриде.
UpdateSQL - обновление записи ('update TABLICA set POLE_A=:POLE_A, POLE_B=:POLE_B where KEY_FIELD=:OLD_KEY_FIELD')
DeleteSQL - удаление записи ('delete from TABLICA where KEY_FIELD=:OLD_KEY_FIELD')
Наименование полей естественно должно быть из Вашей таблицы FB. Транзакция безусловно тоже должна быть подключена. Для запросов на чтение как правило достаточно параметров транзакции
'read' 'read_committed' 'rec_version' . Для запросов на изменение 'read_committed' 'rec_version' 'nowait' в большинстве случаев тоже достаточно.
Я сам использую ZEOS. Притом только два компонента - компонент подключения и компонент запроса. Считаю,ИМХО, работать непосредственно в таблице с базой это не правильно.
Я все делаю через не DB элементы т.е. (TEdit, TMemo, TComboBox и пр.) и затем, когда мне нужно уже руками пишу соответствующие запросы на добавление, и изменение.
Гриды использую только для просмотра данных, т.е. запросы на выборку (select).
InsertSQL - вставка записи. Запрос примерно такой ('insert into TABLICA (POLE_A,POLE_B) values (:POLE_A,:POLE_B)') - запросы параметрические. Параметры и будут поля Вашей таблицы, которая проецируется в гриде.
UpdateSQL - обновление записи ('update TABLICA set POLE_A=:POLE_A, POLE_B=:POLE_B where KEY_FIELD=:OLD_KEY_FIELD')
DeleteSQL - удаление записи ('delete from TABLICA where KEY_FIELD=:OLD_KEY_FIELD')
Наименование полей естественно должно быть из Вашей таблицы FB. Транзакция безусловно тоже должна быть подключена. Для запросов на чтение как правило достаточно параметров транзакции
'read' 'read_committed' 'rec_version' . Для запросов на изменение 'read_committed' 'rec_version' 'nowait' в большинстве случаев тоже достаточно.
Я сам использую ZEOS. Притом только два компонента - компонент подключения и компонент запроса. Считаю,ИМХО, работать непосредственно в таблице с базой это не правильно.
Я все делаю через не DB элементы т.е. (TEdit, TMemo, TComboBox и пр.) и затем, когда мне нужно уже руками пишу соответствующие запросы на добавление, и изменение.
Гриды использую только для просмотра данных, т.е. запросы на выборку (select).
Ну вот, наконец какая то определенность. Спасибо. Буду эксперементировать с запросами в свойствах
