lazarus + Firebird embedded

Модератор: Модераторы

Re: lazarus + Firebird embedded

Сообщение and » 20.11.2009 17:52:25

2Ustas: Может, Вы транзакцию - общую для всех - после ExecSQL закрываете? Возможно, неявным образом (какое-нибудь свойство типа autoCommitAfterExecute).
Аватара пользователя
and
постоялец
 
Сообщения: 124
Зарегистрирован: 16.09.2009 17:11:01
Откуда: г. Гомель, Беларусь

Re: lazarus + Firebird embedded

Сообщение Vadim » 20.11.2009 18:01:06

Ustas
Код напишите, как именно Вы это делаете.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: lazarus + Firebird embedded

Сообщение Ustas » 20.11.2009 22:15:02

Я не понял, какой код интересует, но...

В компоненте SQLQueryMain.SQL записан select:

Код: Выделить всё
select
    tablemain.id,
    tablemain.name,
    tablemain.ls,
    tablemain.file_fmt,
    tablemain.file_code,
    tablemain.set_str,
    tablemain.ls_empty
from tablemain
order by tablemain.name


дальше идет обработка таблицы TableWork, используя данные TableMain и другие данные.

Код: Выделить всё
   SQLQueryWork.SQL.Clear;
    SQLQueryWork.SQL.Add('INSERT INTO TableWork');
    SQLQueryWork.SQL.Add('(Num, FIO, LS, SUMMA, STAT, NOTE)');
    SQLQueryWork.SQL.Add('VALUES');
    SQLQueryWork.SQL.Add('(:Num, :FIO, LS, :SUMMA, :STAT, :NOTE)');
    SQLQueryWork.Params.ParamByName('Num').AsInteger  := SQLQueryMain.FieldByName('ID').AsInteger;
    SQLQueryWork.Params.ParamByName('FIO').AsBlob     := UTF8ToAnsi(tmp_RL.FIO);
    SQLQueryWork.Params.ParamByName('LS').AsString    := tmp_RL.LS;
    SQLQueryWork.Params.ParamByName('Summa').AsFloat  := tmp_RL.Sum;
    SQLQueryWork.Params.ParamByName('Stat').AsInteger := tmp_RL.Stat;
    SQLQueryWork.Params.ParamByName('Note').AsBlob    := tmp_RL.Note;
    SQLQueryWork.ExecSQL;
    SQLTransaction.Commit;
  except
     on E: Exception do
       begin
         MessageDlg(E.message, mtError, [mbOK], 0);
         SQLTransaction.Rollback;
         SQLQueryWork.Active := False;
         Exit;
       end;
  end;


А свойства я никаких не затрагиваю, кроме обязательных.

P.S.
Уважайте форумчан!

Вам то хорошо... А я вот - полный хам. Столько в жизни сделал ошибок... Ё...
Последний раз редактировалось Ustas 21.11.2009 10:30:25, всего редактировалось 1 раз.
Ustas
постоялец
 
Сообщения: 146
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

Re: lazarus + Firebird embedded

Сообщение Mr.Smart » 20.11.2009 22:26:18

Ustas
Уважаемый для публикации кода есть тег [code], а не [b]!
Уважайте форумчан!
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: lazarus + Firebird embedded

Сообщение and » 21.11.2009 22:22:02

2Ustas: То, о чём я и говорил:
Код: Выделить всё
SQLTransaction.Commit;
Вы завершили транзакцию - соответственно, все датасеты закрылись. Или делайте Commit после окончания всей работы, или развесьте SQLQueryMain и SQLQueryWork на разные компоненты транзакций.
Аватара пользователя
and
постоялец
 
Сообщения: 124
Зарегистрирован: 16.09.2009 17:11:01
Откуда: г. Гомель, Беларусь

Re: lazarus + Firebird embedded

Сообщение Ustas » 23.11.2009 12:57:17

Подскажите, пожалуйста, как прочитать параметры, возвращаемые RETURNING:

Код: Выделить всё
      SQLQueryWork.SQL.Clear;
      SQLQueryWork.SQL.Add('INSERT INTO TableLink');
      SQLQueryWork.SQL.Add('(NUM, ID, SUMMA');
      SQLQueryWork.SQL.Add('VALUES');
      SQLQueryWork.SQL.Add('(GEN_ID(GEN_TABLELINK_NUM, 1), 0, 0)');
      SQLQueryWork.SQL.Add('RETURNING NUM');
      SQLQueryWork.ExecSQL;
Ustas
постоялец
 
Сообщения: 146
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

Re: lazarus + Firebird embedded

Сообщение Mr.Smart » 23.11.2009 13:13:31

Почитав документацию по RETURNING http://www.firebirdsql.su/doku.php?id=returning
Заострил своё внимание на абзаце:
3. Если в операторе изменения данных (INSERT, UPDATE OR INSERT, UPDATE, DELETE) присутствует оператор RETURNING, то оператор изменения данных должен быть выполнен при помощи API-функции isc_info_sql_stmt_exec_procedure, вместо обычных для этих случаев API-функций (например, оператор INSERT выполняется при помощи API-функции isc_info_sql_stmt_insert), следовательно программная прослойка для работы с сервером должна поддерживать это особенность.

Замечания переводчика: Внимание Delphi-разработчиков: текущие на момент написания статьи версии компонентов доступа к серверу - IBX x.11 не поддерживает эту особенность; - IBDAC 2.20 не поддерживает эту особенность; - FIBPlus 6.80 поддерживает эту особенность

Так, что я не думаю, что стандартные компоненты Lazarus поддерживают это :wink:
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: lazarus + Firebird embedded

Сообщение Ustas » 03.12.2009 11:28:39

Расскажите мне, пожалуйста, какие DLL (и другие файлы) необходимы к моей программе, работающей с локальной базой Firebird на другом компьютере (с неустановленным Firebird)?

P.S.
Для желающих послать меня на английские сайты, сделаю признание: Английский знаю со словарем, до буквы "F".
Ustas
постоялец
 
Сообщения: 146
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

Re: lazarus + Firebird embedded

Сообщение v-t-l » 03.12.2009 14:13:02

Насколько я знаю, ни Interbase, ни Firebird не работают с базами, лежащими в сети - особенности архитектуры.
Какое-то время назад видел упоминание об экспериментальной поддержке NFS.
Может, в последних версиях что-нибудь изменилось.
v-t-l
энтузиаст
 
Сообщения: 728
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: lazarus + Firebird embedded

Сообщение Ustas » 03.12.2009 18:01:35

Ustas писал(а):Расскажите мне, пожалуйста, какие DLL (и другие файлы) необходимы к моей программе, работающей с локальной базой Firebird на другом компьютере (с неустановленным Firebird)?


Я имею ввиду вот что: я написал программу и хочу отдать ее пользователю. Вот и хочу выяснить, что мне надо: инсталировать Firebird у него на компьютере или DLL`ми обойтись можно.
Ustas
постоялец
 
Сообщения: 146
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

Re: lazarus + Firebird embedded

Сообщение v-t-l » 03.12.2009 18:24:34

Ustas писал(а):DLL`ми обойтись можно.

Применение Firebird embedded обсуждалось на форуме.
v-t-l
энтузиаст
 
Сообщения: 728
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: lazarus + Firebird embedded

Сообщение Ustas » 04.12.2009 14:49:21

v-t-l писал(а):Применение Firebird embedded обсуждалось на форуме.


Обсуждалось, и не раз, и да же, не на этом форуме. Но точного ответа я не нашел. Все ответы сводятся к двум формулировкам:
1. Не помню, что такое было, читай доки;
2. Уже обсуждалось.

Может, конечно, я слеп (даже спорить не буду), так укажите ПУТЬ истинный, какие разделы форумы я пропустил.
Ustas
постоялец
 
Сообщения: 146
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

Re: lazarus + Firebird embedded

Сообщение v-t-l » 04.12.2009 16:02:59

http://www.freepascal.ru/forum/viewtopi ... 7809#p7782

Добавлено спустя 37 минут 37 секунд:
http://www.freepascal.ru/forum/viewtopi ... d=a#p31643

Добавлено спустя 23 минуты 29 секунд:
http://www.google.ru/search?hl=ru&q=Fir ... epascal.ru
v-t-l
энтузиаст
 
Сообщения: 728
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: lazarus + Firebird embedded

Сообщение Ustas » 08.12.2009 13:15:48

v-t-l писал(а):http://www.freepascal.ru/forum/viewtopic.php?f=26&t=1095&p=7809#p7782

Добавлено спустя 37 минут 37 секунд:
http://www.freepascal.ru/forum/viewtopi ... d=a#p31643

Добавлено спустя 23 минуты 29 секунд:
http://www.google.ru/search?hl=ru&q=Fir ... epascal.ru


Вот за это большое спасибо. Извиняюсь за "долгую реакцию" - дела.
Ustas
постоялец
 
Сообщения: 146
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

Re: lazarus + Firebird embedded

Сообщение Ustas » 13.12.2009 16:26:24

Здравствуй народ!

Меня терзают смутные сомнения по поводу запросов SELECT, а именно:

есть таблица TABLE с полями ID, NAME, NUM, ..., FIELD_N. И я делаю запрос

Код: Выделить всё
SELECT NUM
FROM TABLE
WHERE ID = :ID
ORDER BY NAME

Все работает (по крайней мере, связей, порочащих запрос, я не заметил). Назовем этот запрос "Вариант А". А почему я спрашиваю, так это потому, что такой фокус в BDE (Delphi) не прошел бы. Там надо в SELECT`е указывать все используемые поля, т.е.:

Код: Выделить всё
SELECT ID, NAME, NUM
FROM TABLE
WHERE ID = :ID
ORDER BY NAME

Назовем это "Вариант Б".

Я извиняюсь за чрезмерную мнительность (а может и глупость), но вопрос встал: Нет ли каких "подводных камней" с Вариантом А"?
Ustas
постоялец
 
Сообщения: 146
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

Пред.След.

Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

Рейтинг@Mail.ru