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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.07.2012, 10:41   #1
aimk0
Пользователь
 
Регистрация: 05.05.2010
Сообщений: 35
По умолчанию Динамическое создание таблиц

Добрый день.
Пытаюсь создать таблицы в postgresql, аналогичные таблицам FoxPro.
Считываю названия таблиц из БД FoxPro

Код:
Session.GetTableNames('probb','*',false,false,ComboBox1.Items);
Создаю таблицы

Код:
procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer;
    s:string;
begin
   for j := 0 to ComboBox1.Items.Count - 1 do
   begin
   Table1.TableName:=ComboBox1.Items[j];
   Memo1.Lines.Clear;
   memo1.Lines.Add('create table "'+Table1.TableName+'" ( ns serial,');   
   Table1.FieldDefs.Update;
   with Table1.FieldDefs do
    begin
      for i := 0 to Count - 1 do
        begin
          s:='';
          s:=Items[i].Name;
          case Items[i].DataType of
             ftString: s:=s+' character varying('+IntToStr(Items[i].Size)+')'; 
             ftInteger: s:=s+' integer';
             ftDate: s:=s+' date';
             ftBCD: s:=s+' numeric ('+IntToStr(Items[i].Precision)+', '+ IntToStr(Items[i].Size)+')';
             ftBoolean: s:=s+' boolean';
          end;
         s:=s+',';
          Memo1.Lines.Add(s);
        end;
    end;
    Memo1.Lines.Add('CONSTRAINT "'+Table1.TableName+'_key" PRIMARY KEY (ns))');
    ADOCommand1.CommandText:=Memo1.Text;
    ADOCommand1.Execute;
   end;
end;
Проблема в том, что ftBCD не срабатывает... в запросе получается что-то вроде
Код:
create table "table1" ( ns serial,
SE character varying(21),
DSE character varying(21),
RS,
PPU,
KSE,
CONSTRAINT "table1" PRIMARY KEY (ns))
для numeric полей не добавляется тип данных... Подскажите, в чем может быть проблема?
aimk0 вне форума Ответить с цитированием
Старый 03.07.2012, 11:37   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Если Table1 BDE-шный, то все поля типа NUMERIC трансформируются в Smallint, Integer или Float. BCD вылазит при использовании ADO (если не ошибаюсь). А в принципе это можно глянуть в DESIGN-TIME, потянув поля в DataSet
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.07.2012, 11:41   #3
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

ftFloat не пробовали?
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 03.07.2012, 12:50   #4
astecenko
Homo Interneticus
Форумчанин
 
Аватар для astecenko
 
Регистрация: 04.03.2011
Сообщений: 611
По умолчанию

Вариантов гораздо больше
astecenko вне форума Ответить с цитированием
Старый 03.07.2012, 13:19   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Сообщение от astecenko Посмотреть сообщение
Вариантов гораздо больше
И каким образом эта куча вариантов имеет отношение к преобразованию фоксовского NUMERIC?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.07.2012, 13:33   #6
aimk0
Пользователь
 
Регистрация: 05.05.2010
Сообщений: 35
По умолчанию

Table1 BDEшный. Посмотрел в свойствах таблицы, у полей RS, PPU datatype = ftsmallint, у KSE - Ftfloat. Добавил в прогу эти типы, убрал BCD вроде все работает.
Но откуда мне взять длину строки до и после запятой, если свойства size и precision у полей ftsmallint и ftfloat равны нулю?
aimk0 вне форума Ответить с цитированием
Старый 03.07.2012, 14:03   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Можно найти какой нибудь компонент, типа TDbf и ему подобных, или по хаккерски - самому прочитать заголовок dbf и вычислить size и precision
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическое создание romanzi Общие вопросы Delphi 1 24.08.2011 12:20
динамическое создание компонентов DOLBY Компоненты Delphi 10 17.10.2010 14:03
Динамическое создание таблиц.Invalid field size Студло Помощь студентам 4 30.03.2010 08:30
Динамическое создание TShape tocsik Общие вопросы Delphi 2 09.02.2010 17:20
Динамическое создание таблиц БД Женя27041979 БД в Delphi 2 06.02.2010 20:18