Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как узнать тип данных в таблице (ODBC) ? [D7]


SkyN ©   (2007-04-19 17:14:00) 

Как узнать тип данных хранящихся в таблице?

К БД обращаюсь через ADO -> ODBC

Список таблиц и полей получаю через ADOConnection (GetTableNames, GetFieldNames), осталось узнать какой тип данных в каждом поле.


SkyN   (2007-04-20 17:13:00) [1]

То, что получилось:

uses
 ADODB;
procedure TForm1.Button1Click(Sender: TObject);
var
 adoconnection: Tadoconnection;
begin
 adoconnection := Tadoconnection.Create(Application);
 adoconnection.ConnectionString := 'Provider=MSDASQL.1;Persist Security Info=False;Data Source='+BaseName;
 adoconnection.LoginPrompt := False;
 adoconnection.GetTableNames(ListBox1.Items);
 adoconnection.Free;
end;

procedure TForm1.ListBox1Click(Sender: TObject);
var
 i: integer;
 adoconnection: tadoconnection;
 adodataset: tadodataset;
 S: String;
begin
 for i := 0 to ListBox1.Count-1 do
   if ListBox1.Selected[i] then begin
     ///////////////////
       adoconnection := Tadoconnection.Create(Application);
       adoconnection.ConnectionString := 'Provider=MSDASQL.1;Persist Security Info=False;Data Source='+BaseName;
       adoconnection.LoginPrompt := False;
       adodataset := tadodataset.Create(Application);

       adoconnection.OpenSchema(siColumns,VarArrayOf([Null, Null, ListBox1.Items[i]]),EmptyParam,ADODataSet);
       ListBox2.Clear;
       While not ADODataSet.Eof do begin
         if not ADODataSet.FieldByName('CHARACTER_MAXIMUM_LENGTH').IsNull then S := ' Текстовый '+ADODataSet.FieldByName('CHARACTER_MAXIMUM_LENGTH').AsString;
         if not (ADODataSet.FieldByName('NUMERIC_PRECISION').IsNull and ADODataSet.FieldByName('NUMERIC_SCALE').IsNull) then S := ' Числовой ';
         ListBox2.Items.Add(ADODataSet.FieldByName('COLUMN_NAME').AsString+S);
         ADODataSet.Next;
       end;

       adodataset.Free;

       adoconnection.Free;
     ///////////////////
     Break;
   end;
end;


sniknik   (2007-04-19 17:57:00) [2]

ADOConnection.OpenSchema()


Desdechado   (2007-04-19 17:47:00) [3]

SELECT * FROM tbl WHERE 1=0


Плохиш   (2007-04-19 17:33:00) [4]

FieldDefs


SkyN   (2007-04-19 17:29:00) [5]

Нужно разделение
 Целочисленный
 Дробное число
 Строка
Если тип строка, то размер


Desdechado   (2007-04-19 17:19:00) [6]

Родной или его дельфийский аналог?


Наверх

Титульная страница Поиск, карта сайта Написать письмо