Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2013, 20:53   #1
Moneo
Пользователь
 
Регистрация: 21.01.2010
Сообщений: 37
По умолчанию Динамическое создание таблиц Interbase

Раньше делал таблицы на BDE, теперь надо на Interbase их переделать.
Был такой код:
Код HTML:
ibtable1.TableName:=mytable;
ibtable1.FieldDefs.clear;
ibtable1.FieldDefs.add('id',ftautoinc);  //
ibtable1.FieldDefs.add('name',ftmemo,0,false);
ibtable1.FieldDefs.add('quest',ftmemo,0,false);
ibtable1.FieldDefs.add('type',ftinteger,0,false);
ibtable1.FieldDefs.Add('ans',ftmemo,0,false);
ibtable1.FieldDefs.Add('media',ftboolean);
ibtable1.FieldDefs.Add('media path',ftmemo,0,false);
ibtable1.CreateTable;
ibtable1.Active:=true;
ibtable1.close;
ibtable1.TableName:=mytable;
ibtable1.open;
А теперь вопрос как типы переписать, чтоб id был инкрементом и во что переделать memo?
Moneo вне форума Ответить с цитированием
Старый 28.05.2013, 21:49   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

в 99% "Динамическое создание таблиц" - кривая задумка.
eval вне форума Ответить с цитированием
Старый 28.05.2013, 21:56   #3
Moneo
Пользователь
 
Регистрация: 21.01.2010
Сообщений: 37
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
в 99% "Динамическое создание таблиц" - кривая задумка.
Ну с моей стороны виднее что лучше подходит под задачу. Лучше бы рассказали как это сделать.
Moneo вне форума Ответить с цитированием
Старый 28.05.2013, 22:03   #4
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

кривое само делается, ему помогать смысла нет
eval вне форума Ответить с цитированием
Старый 28.05.2013, 22:27   #5
Moneo
Пользователь
 
Регистрация: 21.01.2010
Сообщений: 37
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
кривое само делается, ему помогать смысла нет
Я смотрю вы просто оффтопите "Профессионал" - дальнейший разговор мне с вами не интересен.
Moneo вне форума Ответить с цитированием
Старый 29.05.2013, 06:39   #6
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Читай в гугле инструкцию по команде SQL CREATE TABLE. Для организации автоинкремента - про понятия триггер и генератор.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 29.05.2013, 10:27   #7
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

Цитата:
в 99% "Динамическое создание таблиц" - кривая задумка.
+1, согласен
Цитата:
Ну с моей стороны виднее что лучше подходит под задачу. Лучше бы рассказали как это сделать.
было бы виднее - подобного вопроса не возникло бы.

тебя спасет IBScripter и скрипт вида
Код:
CREATE GENERATOR gen_actions_id;

CREATE TABLE actions (
    recordid    INTEGER 
    actionid    INTEGER 
    goodid      VARCHAR(6) 
    dis         DOUBLE PRECISION 
    datechange  DATE,
    deleted     INTEGER 
);

CREATE OR ALTER TRIGGER actions_bi FOR actions
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.recordid IS NULL) THEN
    NEW.recordid = GEN_ID(gen_actions_id,1);
END;
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 29.05.2013, 11:28   #8
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
Moneo
вы расскажите на кой вам это надо, а я вам расскажу о вашем "виднее", и тема рассосётся сама собой.
eval вне форума Ответить с цитированием
Старый 31.05.2013, 11:43   #9
superedward
Форумчанин
 
Аватар для superedward
 
Регистрация: 27.11.2012
Сообщений: 190
По умолчанию

Сама идея не такая уж корявая - в той же самой 1С можно динамически создать/изменить таблицу.
Код:
     IBQuery:=TIBQuery.Create(Self);
     IBTransactionWrite:=TIBTransaction.Create(Self);
     try
     with IBTransactionWrite do begin
      DefaultDatabase:=IBDataBase;
      Params.Clear;
      Params.Add('nowait');
      Params.Add('read_committed');
      Params.Add('rec_version');
     end;
     with IBQuery do begin
      Database:=IBDataBase;
      Transaction:=IBTransactionWrite;
      IBTransactionWrite.StartTransaction;
      SQL.Clear;
      SQL.Add('CREATE TABLE '+sTable+' (');
      SQL.Add(' fID INTEGER NOT NULL PRIMARY KEY,');
      SQL.Add(' fName VARCHAR(255)');
      SQL.Add(')');
      ExecSQL;

      SQL.Clear;
      SQL.Add('CREATE GENERATOR g'+sTable+'ID');
      ExecSQL;
      IBTransactionWrite.Commit;
     end;{with IBQuery do begin}
     finally
      IBQuery.Free;
      IBTransactionWrite.Free
     end;

Последний раз редактировалось superedward; 31.05.2013 в 11:46.
superedward вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическое подключение к БД(InterBase) roxy7 БД в Delphi 1 05.03.2013 21:53
Динамическое создание таблиц aimk0 БД в Delphi 6 03.07.2012 14:03
Ошибка при добавлении таблиц sql error code = - 204[interbase] neomax38 БД в Delphi 0 04.06.2012 11:01
Динамическое создание таблиц.Invalid field size Студло Помощь студентам 4 30.03.2010 08:30
Динамическое создание таблиц БД Женя27041979 БД в Delphi 2 06.02.2010 20:18