Блог Александра Божко
Архивы
Рубрики
Поделись с другими!
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

Очередной небольшой пост-шпаргалка.

Как и большинство компонентов доступа к БД, FireDAC позволяет получить списки имен таблиц и полей. Однако, отличительной особенностью FireDAC является то, что при получении этих списков, в случае, если имя поля совпадает с ключевыми словами SQL, оно заключается в квадратные скобки. Это можно использовать для анализа структуры БД и поиска “проблемных имен полей”. К слову, если структура БД составлена не достаточно аккуратно, такие поля могут доставить массу неприятностей при отладке SQL запросов.

Все действительно довольно просто. Я покажу как решить задачу на примере СУБД MS Access. Принципиальных отличий при работе с другими СУБД быть не должно. Поместим на форму три компонента:

ADConnection: TADConnection;
ADPhysMSAccessDriverLink1: TADPhysMSAccessDriverLink;
ADGUIxWaitCursor1: TADGUIxWaitCursor;

Настроим подключение ADConnection с помощью редактора. Так же расположим на форме кнопку и компонент Memo. Обработаем нажатие кнопки следующим образом:

procedure TForm1.Button1Click(Sender: TObject);
var
Lst, fldLst: TStrings;
tblName, fldName: string;
begin
try
  Lst:= TStringList.Create;
  ADConnection.Connected:= True;
  ADConnection.GetTableNames(  '', '', '', Lst, [osMy],[tkTable, tkTempTable, tkLocalTable]);
  for tblName in Lst do
  begin
   try
   FldLst:= TStringList.Create;
   ADConnection.GetFieldNames('', '', tblName, '', FldLst);
   for fldName in fldLst do
   begin
     if Pos('[', fldName)=1 then
     begin
       Memo1.Lines.Add(tblName+ ' --> '+fldName);
     end;
   end;

   finally
    FreeAndNil(fldLst);
   end;
  end;

finally
  FreeAndNil(Lst);
end;
end;

Как видно из кода, списки имен таблиц и полей формируются при помощи двух методов (GetTableNames и GetFieldNames). Если имя поля заключено в квадратные скобки, оно выводится в Memo.  Результат выполнения данного кода может вас изрядно удивить.

tblCompanies –> [Currency]
tblCompanies_PDA –> [Password]
tblDeleted –> [Unique]
tblEmployee_tblVariables –> [Value]
tblEmployees –> [Password]
tblModifications –> [Unique]
tblProjects_PDA –> [Password]
tblSchedule –> [Unique]
tblTiming –> [Unique]
tblTiming_PDA –> [Unique]
tblTiming_PDA –> [Password]
tblVariables –> [Value]

А самое интересное, что попытка обратиться к этим полям непосредственно из MS Access без использования квадратных скобок вызывает ошибку.

В заключение хочу напомнить, что 22 мая 2013 г. заканчивается время действия вводной скидки на Delphi, C++Builder и RAD Studio XE4.

Купить сейчас и сэкономить 10%.


Поделись с другими!
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Продукты DevArt
Купить онлайн:



Читай русскоязычные Delphi блоги
Каталог блогов Blogdir.ru
Яндекс.Метрика