lazarus + Firebird embedded
Модератор: Модераторы
2Ustas: Может, Вы транзакцию - общую для всех - после ExecSQL закрываете? Возможно, неявным образом (какое-нибудь свойство типа autoCommitAfterExecute).
Ustas
Код напишите, как именно Вы это делаете.
Код напишите, как именно Вы это делаете.
Я не понял, какой код интересует, но...
В компоненте SQLQueryMain.SQL записан select:
дальше идет обработка таблицы TableWork, используя данные TableMain и другие данные.
А свойства я никаких не затрагиваю, кроме обязательных.
P.S.
Вам то хорошо... А я вот - полный хам. Столько в жизни сделал ошибок... Ё...
В компоненте 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 09:30:25, всего редактировалось 1 раз.
Ustas
Уважаемый для публикации кода есть тег [code], а не [b]!
Уважайте форумчан!
Уважаемый для публикации кода есть тег [code], а не [b]!
Уважайте форумчан!
2Ustas: То, о чём я и говорил: Вы завершили транзакцию - соответственно, все датасеты закрылись. Или делайте Commit после окончания всей работы, или развесьте SQLQueryMain и SQLQueryWork на разные компоненты транзакций.
Код: Выделить всё
SQLTransaction.Commit;Подскажите, пожалуйста, как прочитать параметры, возвращаемые 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;
Почитав документацию по RETURNING http://www.firebirdsql.su/doku.php?id=returning
Заострил своё внимание на абзаце:
Так, что я не думаю, что стандартные компоненты Lazarus поддерживают это
Заострил своё внимание на абзаце:
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 поддерживают это
Расскажите мне, пожалуйста, какие DLL (и другие файлы) необходимы к моей программе, работающей с локальной базой Firebird на другом компьютере (с неустановленным Firebird)?
P.S.
Для желающих послать меня на английские сайты, сделаю признание: Английский знаю со словарем, до буквы "F".
P.S.
Для желающих послать меня на английские сайты, сделаю признание: Английский знаю со словарем, до буквы "F".
Насколько я знаю, ни Interbase, ни Firebird не работают с базами, лежащими в сети - особенности архитектуры.
Какое-то время назад видел упоминание об экспериментальной поддержке NFS.
Может, в последних версиях что-нибудь изменилось.
Какое-то время назад видел упоминание об экспериментальной поддержке NFS.
Может, в последних версиях что-нибудь изменилось.
Ustas писал(а):Расскажите мне, пожалуйста, какие DLL (и другие файлы) необходимы к моей программе, работающей с локальной базой Firebird на другом компьютере (с неустановленным Firebird)?
Я имею ввиду вот что: я написал программу и хочу отдать ее пользователю. Вот и хочу выяснить, что мне надо: инсталировать Firebird у него на компьютере или DLL`ми обойтись можно.
Ustas писал(а):DLL`ми обойтись можно.
Применение Firebird embedded обсуждалось на форуме.
v-t-l писал(а):Применение Firebird embedded обсуждалось на форуме.
Обсуждалось, и не раз, и да же, не на этом форуме. Но точного ответа я не нашел. Все ответы сводятся к двум формулировкам:
1. Не помню, что такое было, читай доки;
2. Уже обсуждалось.
Может, конечно, я слеп (даже спорить не буду), так укажите ПУТЬ истинный, какие разделы форумы я пропустил.
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
Добавлено спустя 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 писал(а):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
Вот за это большое спасибо. Извиняюсь за "долгую реакцию" - дела.
Здравствуй народ!
Меня терзают смутные сомнения по поводу запросов SELECT, а именно:
есть таблица TABLE с полями ID, NAME, NUM, ..., FIELD_N. И я делаю запрос
Все работает (по крайней мере, связей, порочащих запрос, я не заметил). Назовем этот запрос "Вариант А". А почему я спрашиваю, так это потому, что такой фокус в BDE (Delphi) не прошел бы. Там надо в SELECT`е указывать все используемые поля, т.е.:
Назовем это "Вариант Б".
Я извиняюсь за чрезмерную мнительность (а может и глупость), но вопрос встал: Нет ли каких "подводных камней" с Вариантом А"?
Меня терзают смутные сомнения по поводу запросов 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Назовем это "Вариант Б".
Я извиняюсь за чрезмерную мнительность (а может и глупость), но вопрос встал: Нет ли каких "подводных камней" с Вариантом А"?
