Определить, существует ли таблица - PullRequest
1 голос
/ 08 июля 2011

В SQL Server вы можете написать SQL, чтобы проверить, существует ли таблица.Как я могу сделать это для ADS?

Мне нужно написать некоторый код Delphi, чтобы сказать, существует ли таблица, сделайте это еще ...

Ответы [ 4 ]

2 голосов
/ 08 июля 2011

Системная процедура sp_GetTables может сообщить вам, какие таблицы существуют в каталоге, к которому вы подключились:

ВЫПОЛНИТЬ ПРОЦЕДУРУ sp_GetTables (NULL, NULL, NULL, 'TABLE')

Решением, отличным от SQL, было бы использование API AdsCheckExistence .

1 голос
/ 08 июля 2011

Я не пользователь ADS, поэтому не могу ответить подробно.

См. http://devzone.advantagedatabase.com/dz/webhelp/Advantage10.1/index.html

Представление are is system.tables с информацией о таблицах.Я полагаю, вы также можете написать запрос SQL для проверки таблицы.

0 голосов
/ 10 августа 2011

Код Delphi:

function TableExists(AConnection: TADOConnection; const TableName: string): boolean;
var
R: _Recordset;
begin
if AConnection.Connected then
try
  R := AConnection.Execute('Select case when OBJECT_ID(''' + TableName + ''',''U'') > 0 then 1 else 0 end as [Result]', cmdText, []);
  if R.RecordCount > 0 then
   Result := (R.Fields.Items['Result'].Value = 1);

except on E:exception do Result := false;
end;

эта простая функция использует существующий TADOConnection

end;

0 голосов
/ 09 июля 2011

Мне нравится ответ Питера, но, в зависимости от того, что вам нужно сделать, вы можете искать оператор TRY, CATCH, FINALLY.

TRY
   // Try to do something with the table
   select top 1 'file exists' from "non_existing_table";

CATCH ADS_SCRIPT_EXCEPTION 

   // If a "7041 - File does not exist" error ocurrs
   IF __errcode = 7041 THEN 
      // Do something else
      select 'file does not exist' from system.iota; 

   ELSE 
      // re-raise the other exception
      RAISE; 

   END IF; 
END TRY;
...