powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / тихо шифером шурша...
12 сообщений из 12, страница 1 из 1
тихо шифером шурша...
    #32305491
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имею таблицу modules
она содержит в себе скрипты для интерфейса.

при каждом запуске программы я обновляю эту таблицу и все прекрасно работает. но сегодня я решил залесть в процедуру обновления и малеха поправить.

то что я там увидел поразило мое воображение.
а именно.
все мои интервейсные скрипты лежат в отдельных файлах в специальной папке. и процедура должна поочереди эти файлы брать и складывать в таблицу их содержимое предварительно эту таблицу очистив.
но загвоздка в том что по моей тупости очистка таблицы находится не _до_ цикла а _внутри_ него. и работает. уже пол года.

вот текст на делфи:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
     with TFIBDATASET.create(fbdb) do
     begin
          database:=fbdb;
          transaction:=TFIBTRANSACTION.create(fbdb);
          transaction.DefaultDatabase:=fbdb;
          transaction.active:=true;
          repeat
                selectsql.clear;
                selectsql.add('delete from modules');
                open;
                close;

                selectsql.LoadFromFile('.\scripts\'+fd.cFileName);
                open;
          until not findnextfile(hf,fd);
          transaction.Commit;
          transaction.free;
          free;
     end;


что скажете?
firebird1.0.2 @ freebsd4.5
...
Рейтинг: 0 / 0
тихо шифером шурша...
    #32305565
Denis Uskov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видимо код сильно урезан по отношению к реалу!
Конструкция вида: delete from ... должна выполняться через ExecSQL(для FIBPlus не знаю имя метода), и соо-но Open должен выдавать ошибку. Хотя, мож в плюсах это решено по другому.

С уважением, Denis Uskov
...
Рейтинг: 0 / 0
тихо шифером шурша...
    #32305573
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
код взят прямо с реала и составляет роцн\ентов 80-90 от процедуры. могу всё кинуть, да только смысла нет, думаю.

по поводу .open;
все работает. нормально, тоесть так как мне нужно, после запуска в таблице появляется новая копия папки. причем primary key уменя modulename тоесть два одинаковых скрипта в таблице быть немогут.
...
Рейтинг: 0 / 0
тихо шифером шурша...
    #32305890
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вобще прально говорят - Open подразумевает использование команды SELECT.
Почему бы DELETE FROM ... не засунуть в DeleteSQL.
И ещё я точно не могу сказать, но TFIBDATASET возможно является абстрактным классом. Можно попробовать использовать TpFIBDATASET
...
Рейтинг: 0 / 0
тихо шифером шурша...
    #32305919
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и еще я точно могу сказать что все работало, работает и работать будет.
у меня вся программа построена на трех компонентах:
TFIBDATABASE
TFIBTRANSACTION
TFIBDATASET

причес первый в единственном экзэмпляре а второй как получится, обычно используется хотя вы сами видите как используется
не о том речь.
речь о том что когда завершается транзакция операция delete происходит всего одна, перва. имхо.
...
Рейтинг: 0 / 0
тихо шифером шурша...
    #32306029
Denis Uskov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ради прикола проверил Open - РАБОТАЕТ с "delete from ..." ????? Сильно удивился, потому как DBGrid выглядит в это время ... непонятно

По программе, приведи весь код, потому как в теории после такой процедуры должны остаться данные только последнего

Код: plaintext
1.
selectsql.LoadFromFile('.\scripts\'+fd.cFileName); 
Open;


поэтому надо посмотреть!

С уважением, Denis Uskov
...
Рейтинг: 0 / 0
тихо шифером шурша...
    #32306055
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот весь код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
procedure TfmMain.s_upload;
var
   fd:TWin32FindDataA;
   hf:integer;
begin
     hf:=findfirstfile('.\scripts\*.kbsl',fd);
     if hf=- 1  then
        begin
             windows.findclose(hf);
             showmessage('Can not upload scripts by some strange error.');
             exit;
        end;
     with TFIBDATASET.create(fbdb) do
     begin
          database:=fbdb;
          transaction:=TFIBTRANSACTION.create(fbdb);
          transaction.DefaultDatabase:=fbdb;
          transaction.active:=true;
          repeat
                selectsql.clear;
                selectsql.add('delete from modules');
                open;
                close;

                selectsql.LoadFromFile('.\scripts\'+fd.cFileName);
                open;
          until not findnextfile(hf,fd);
          transaction.Commit;
          transaction.free;
          free;
          windows.findclose(hf);
     end;
end;


в файлах гаходится такие тексты:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
insert into modules (module_text, modulename) values ('
<main
!global
  %top_y=0
  %capor=_caporleft
    <record
	$tablename=contact
	$tablekey=contact_id
	$caption=Контакты
	%width=1
	%height=4
	%cellwidth=400
	%cellheight=30
    >
    <frame
	%left=0
	%top=0
	%width=1
	%height=4
	<page
		$caption=
	>
	<field
		$name=contact_address
		$caption=Адрес
		%type=_rt_varchar
		$visible=true
		%width=1
		%height=1
		%left=0
		%top=_top_y
		_top_y=_top_y+_height
	>
    >
>
','contacts')

но... _работало_
сейчас я исправил, но факт... кстати насчет платформы я прогнал.
платформа:
winnt40 & FireBird1.5rc5
...
Рейтинг: 0 / 0
тихо шифером шурша...
    #32306101
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вобще-то я тут по крайней мере 3 момента земетил нехороших - нет явного запуска транзакций это раз, нет обработки ошибок - это 2 и 3 - сам алгоритм: зачем вобще удалять эту запись?
...
Рейтинг: 0 / 0
тихо шифером шурша...
    #32306125
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а как стартовать транзакцию? это раз
в моих программах ошибок не бывает :-) это два. хотя надо подумать...
и какую запись зачем удалять? у меня там много записей. и они все удаляются.
...
Рейтинг: 0 / 0
тихо шифером шурша...
    #32306171
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор писал:а как стартовать транзакцию? это раз
Код: plaintext
1.
2.
with transaction do
  if not InTransaction then
    StartTransaction;

Опять прикалываешься

автор писал:в моих программах ошибок не бывает :-) это два. хотя надо подумать...

Ого, очень приятно познакомиться с таким великим программистом

автор писал:и какую запись зачем удалять? у меня там много записей. и они все удаляются.

Ну зачем много записей удалять? Почему нельзя сделать UPDATE на существующие?
...
Рейтинг: 0 / 0
тихо шифером шурша...
    #32306206
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по поводу третьего.
а если я удалил какойто скриптик? или добавил?
нетуж, мне сложности не нужны.
а что дает
Код: plaintext
1.
2.
3.
with transaction do
  if not InTransaction then
    StartTransaction;

кроме шуток, первый раз слышу. всегда commit да rollback импользовал.
...
Рейтинг: 0 / 0
тихо шифером шурша...
    #32306264
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Та не гони ! Кроме шуток Хватит, тут уже прикалывался один тип. Я на такое не поведусь...
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / тихо шифером шурша...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]