2011-12-15 7 views
0

2つのmdbがリンクされています。 Original.mdb(触れるべきではない)と
私はテーブルが存在するかどうかをチェックするためにこれを使用してきたcopy.mdb:Delphi - ADOを使用してAccess 2003 DBにLINKEDテーブルが存在するか確認してください

function CheckIfTableExists(myTable : AnsiString): boolean; 
var 
    x := Integer; 
    bTrue : boolean; 
begin 

f1.ADOConnection1.GetTableNames(f1.ListBox1.Items,False); 
bTrue := false; 
for x := 0 to f1.ListBox1.Items.Count -1 do 
begin 
    if (f1.ListBox1.Items.Strings[x] = myTable) then 
    begin 
    bTrue := true; 
    end; 
end; 

if (bTrue = true) then 
    begin 
    Result := True; 
    end 
else 
    Result := false; 
end; 
end; 

を私はこれを行うには良い方法があると確信しているが、そうそれは私にとってはうまくいきました。
今度は、LINKと別のmdbテーブルが存在するかどうかを確認する必要があります。誰もそれを行う方法を知っていますか?

I.Bagon

+0

最終 'if'が奇数です。なぜ結果:= bTrue'をしないのですか?しかし、「bトルーズ」はいい名前ではありません。それを取り除き、 'Result'に直接代入してください。そして、あなたが試合を見つけるときに外見から脱出したくないですか? –

+0

それ以外は、大文字と小文字の区別が重要です。 MyTableの値が実際のテーブル名と異なる場合、そのテーブルは見つかりません。デルファイはアクセスではありません。 Delphiでの '= 'を使った文字列比較では、大文字と小文字が区別されます。 'if SameText(Value1、Value2)then'を使うほうが良いでしょう。 –

+0

@DavidHeffernan:アイディアをありがとう。私は実際にこの行を説明するためにこのコードを書いた:f1.ADConnection1.GetTableNames(f1.ListBox1.Items、False);通常、私は必要以上のものを読んでいないでしょう。そして名前bTrueは頭に浮かんだ最初のものでした。リンクされたテーブル名を取得するのと同様の方法があった場合、私は実際に迷っていましたか? – user805528

答えて

1

すべてのアクセスMDBファイルは、基本的には、MDB内のすべてのオブジェクトのリストですMSysObjectsという名前の隠しテーブルを持っています。
このテーブルを照会すると、特定の名前を持つオブジェクトがMDBに存在するかどうかを調べることができます。

MSysObjectsには、MDB内のすべてのオブジェクトが含まれています。テーブルだけでなく、フォームやレコードも同様です。
あなただけのテーブルを取得するためにType列にフィルタリングすることができます:

Type = 1 - >ローカルテーブル
Type = 6 - >リンクテーブル

+0

システムテーブルへのアクセスが拒否されることがよくあります。 – Fionnuala

+0

@ChristianSpecht:このアイデアをありがとう。私は試しましたが、Remouが書いたように、私はシステムテーブルへのアクセスを拒否されます。私はアクセス時に直接パーミッションを設定しようとしましたが、結果は同じでした。この問題を回避する方法はありますか? I.Bagon – user805528

+0

本当の質問は次のとおりです:Delphi + ADOでmSysObjectsテーブルにアクセスすることは可能ですか?私は人々があきらめていることを知るためにだけこの答えをネットで探しています。私は私のプログラムにはtry/catchメソッドを使い、将来はDelphiでAccessを使うのをやめます。もう一度お手伝いをしてください。 I.Bagon – user805528

関連する問題