|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Пара простых вопросов по Delphi + БД
Здравствуйте!
Возникла пара вопросов по Delphi + Firebird: 1. Многие функции в программе связанные с БД, например выборки или установка значений (через FIBDataset или FIBQuery) итд срабатывают со второго раза, то есть заходим в программу - первый раз не срабатывает, со второго раза и далее работает нормально. Очевидно какой-то компонент связи с БД (DB? Dataset? Datasource?) неактивен, после первой команды просыпается, и вторую команду уже обрабатывает нормально. Пока только начинаю разбираться с БД - прошу подсказать как решить данную проблему? в каком компоненте искать и какой параметр? может написать что-то при включении программы вида all.datasets.prepare ? 2. Есть форма, в ней невизуальный объект FIBDataset с уже настроенными командами SQL. В конце ввода данных в форме происходит - Dataset.Post, но в случае ввода новых данных оптимально Insert, а в случае исправления данных в форме оптимально Update... пробую писать очевидную вещь: Dataset.Insert и Dataset.Update, но Delphi ругается на Dataset.Update - говорит такого не знает. Там есть разные варианты начинающиеся на Dataset.Upd.... подскажите какой из них оптимально использовать? 3. В БД процедура вида insert into ..... values (....., 'менеджер ' add coalesce(:name_a,:name_b,:name_c)); Так якобы неправильно, пробовал вместо "add" писать "+", но всё равно ошибка. Как правильно написать, чтобы отправлялось значение собранное из текста {'менеджер '} и {coalesce(:name_a,:name_b,:name_c)} ?? Последний раз редактировалось delphicoding, 02.08.2011 в 19:24. |
#2
|
|||
|
|||
1. Вероятно, TIBDatabase
2. Используй TIBQuery совместно с TIBUpdate (кажется так). Там есть все нужные методы. |
#3
|
|||
|
|||
Вопросы 2-3 решены.
А вопрос 1 не решён. Вот опять вызов хранимой процедуры через FIBStoredProc срабатывает только со второго раза: Код:
procedure TBaseForm.btEditClick(Sender: TObject); begin inherited; With dm.spOfficesEdit do begin // FIBStoredProc Close; ParamByName('OFFICE_CONTACT_USERS_ID').Value := null; .............. ещё параметры ExecProc; close; end; end; Поковырял настройки FIBPlus Каждой процедуре и датасету в FIB назначается DB, которой в свою очередь назначаются 2 так называемые FIBTransaction - Read и Write. При этом по-сути и параметрами они идентичны, кроме одного параметра "Active" - для Write он почему-то выключен... может в этом дело? Какие есть предположения почему мог быть установлен Write Active = False ??? Собственно изменение Write Active = True результата не дало - всё равно некоторые действия с БД работают только со второго раза! |
#4
|
|||
|
|||
Столкнулся с совершенно банальной проблеммой - нужно join несколько таблиц, всё понятно, но в одном месте непонятно - нужно два раза привязать к таблице A таблицу-справочник B по параметрам
on A.id1=B.id on A.id2=B.id чтобы в итоге для A.id1 и A.id1 получить B.name ввиде двух разных значений A.name1 и A.name2 Написать всё могу, но вот что писать в select и как объяснить SQL, что нужно два разных значения - не представляю и код всё время вызывает ошибку! Подскажите кто разбирается! |
#5
|
|||
|
|||
Код:
SELECT T.*, D1.FieldName, D2.FieldName FROM MainTable T LEFT JOIN DicTable D1 ON T.Dic1ID = D1.ID LEFT JOIN DicTable D2 ON T.Dic2ID = D2.ID ... |
#6
|
|||
|
|||
Всё просто Спасибо!
Остался не решён вопрос №1... может у кого есть соображения? Последний раз редактировалось delphicoding, 05.08.2011 в 09:25. |