Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как програмно создать TField ?


Автор: P&$ 16.12.2002, 22:25
Привет!
Озадачиваю!
1. Для Query, во время выполнения программы, надо  создать дополнительное поле (вычисляемое). Делаю так:
var ADR:TStringField;
begin
............
Query1.FieldDefs.Add('ADR',ftString,256);
    ADR:=TStringField.Create(Self);
    ADR.FieldKind:=fkCalculated;
    ADR.FieldName:='ADR';
    ADR.Calculated:=True;
    Query1.Fields.Add(ADR);
........
END;

При открытии запроса возникает ошибка, мол: Field 'ADR' has no dataset !

Вышел из положения тем, что создаю все поля в конструкторе, а затем ненужные Destroy. Но это, по моему, корявый выход. Как создать поле?

Решение нужно какможно скорее! (т.к. иначе предется пользоваться корявыми )
И исче:
2. Как из программы (exe) выполнять скрипты InterBase?

:notify

Автор: Medved 16.12.2002, 23:16
Не знаю, у меня твой код работает...... и открывает, и закрывает....

Автор: Medved 16.12.2002, 23:32
Цитата

2. Как из программы (exe) выполнять скрипты InterBase?


Что ты хочешь этим сказать? Абослютно непонятно....

Если ты хочешь выполнить скрипт из приложения, написанного тобой, то просто весь скрипт загоняешь в свойство SQL компонента TQuery, а затем выпоняешь метод Execute (Query1.Execute).

Автор: P&$ 17.12.2002, 14:39
Да загоняю!
Пример скрипта:

CREATE TABLE TovarGr (
kod SMALLINT NOT NULL PRIMARY KEY,
name VARCHAR(20) NOT NULL
);
CREATE GENERATOR k_TovarGr;
SET GENERATOR k_TovarGr TO 0;
SET TERM ^;
CREATE TRIGGER id_TovarGr FOR TovarGr
ACTIVE
BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.kod IS NULL) THEN
NEW.kod=GEN_ID(k_TovarGr,1) ;
END^
SET TERM ;^

Он выполняет только первую, а на остальные ругается. Я подозреваю в нем синтаксис изменяется, но как?!

Автор: Medved 18.12.2002, 02:25
Попробуй убрать "SET TERM ^"; и знак "^"; //Хотя однозначно не могу гарантировать, что будет работать....


Автор: P&$ 18.12.2002, 19:14
Да он ругается уже на CREATE GENERATOR, т.е. я так понимаю, что разделитель SQL команд в скрипте не как в самом IB   ; а какой-то другой.

Автор: Fantasist 19.12.2002, 03:46
Возможно стоит востпользоваться компонентами IB (IBQuery,IBSQL).

Автор: P&$ 19.12.2002, 21:46
Дык я ими и пользуюсь!  :huh
Delphi 5 IB 5 ? Но ругаетси! :thumbs-up

Автор: Medved 20.12.2002, 04:53
Цитата

Да он ругается уже на CREATE GENERATOR, т.е. я так понимаю, что разделитель SQL команд в скрипте не как в самом IB   ; а какой-то другой.


А на что именно он у тебя ругается? Запости сообщение об ошибке...

Автор: P&$ 20.12.2002, 17:59
Dynamic SQL Error
SQL error code = -104
Token unknown - line 7 char -1
CREATE.

Мол не знает он команды create! (Но это-ж отмаз )
:sneaky2
Если "скармливаю" скрипт isql то все зашибись.
А Вы вообще такое делали?

Еще вопрос назрел, тут по дури установил Delphi и IB 6 - потом решил вернуть 5 (ну на работе 5, а дома "решил поэксперементировать"), теперь IB5 не работает, я уже все файлы, что в ib_install.log принес с рабочего компа (тат то все в норме) - нифига - делает вид что работает, а при попытке создать таблицу пишет мол нет коннекта с базой ( IBGuard в левом углу аж краснеет) err - 901. Это смертельно? (То бишь Win сносить, или в реестре можно поковыряться?)

Автор: Medved 21.12.2002, 04:52
Это конечно не смертельно, но лучше все переустановить.... ИМХО самый быстрый способ....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)