線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1966
推到 Plurk!
推到 Facebook!

判断一个表是否存在

尚未結案
lwd188
一般會員


發表:13
回覆:33
積分:9
註冊:2005-02-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-10-03 02:13:58 IP:218.25.xxx.xxx 未訂閱
各位大大 请问在ACCESS数据库里如何判断一个表的存在,因为我每次都想建立一个相同表 ,但是如果有相同的表存在,用select into 命令就会提示出错.我想如果能判断有这个表存在,我可以在重建之前,先删掉它.不知如何实现?
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-10-03 08:24:31 IP:210.65.xxx.xxx 未訂閱
Hi lwd188,    請參考:    http://delphi.ktop.com.tw/topic.php?topic_id=63012 http://delphi.ktop.com.tw/topic.php?topic_id=63811 ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
lwd188
一般會員


發表:13
回覆:33
積分:9
註冊:2005-02-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-10-07 16:53:27 IP:218.25.xxx.xxx 未訂閱
IF (SELECT OBJECT_ID('tempdb..#abc')) IS NOT NULL begin Drop Table #abc end 不好意思,Fishman前辈,上面的语句在access数据库下怎么实现? 另外我看了这段: [1] 檢查 Access 的某一個資料表是否存在 利用 TADOConnection 的 GetTableNames 方法 TADOConnection1->GetTableNames(List, false); TList 是個 TStrings 物件,裡面就是這個 mdb 的 Table 了 里面的list,怎么写?我要删,添加的表是bb,数据库名是局直机关.mdb 前辈费心了.小弟初学实在不知道GetTableNames语句应该怎么用....... 發表人 - lwd188 於 2005/10/07 17:08:27 發表人 - lwd188 於 2005/10/07 17:10:02
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-10-07 19:59:08 IP:210.68.xxx.xxx 未訂閱
Fishman 大大貼的這篇就有啦....    http://delphi.ktop.com.tw/topic.php?topic_id=63012    
Function TableExists(TableName : String):Boolean;
Var
  Sl : TStrings ;
Begin
  Sl := TstringList.Create;
  // 使用ADO ===============================
  ADOConnection1.GetTableNames(Sl,True);
  Result := Sl.IndexOf(TableName)<> -1 ;
  // 使用BDE ===============================
  Session.GetTableNames('dbAlias',TableName,False,True,Sl);
  Result := Sl.Count>0 ;
  //  擇一使用 ===============================
  Sl.Free;
End;
// ==============================================================
//  函式應用 ====================================================
Begin
  If TableExists('abc') Then  Begin
    xxx.SQL.Text := 'Drop Table [dbo].[abc]' ;
    xxx.ExecSQL;
  End;
  xxx.SQL.Text := 'Select * Into #abc From Table1';
  xxx.ExecSQL;
End
lwd188
一般會員


發表:13
回覆:33
積分:9
註冊:2005-02-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-10-07 21:36:06 IP:218.25.xxx.xxx 未訂閱
谢谢malanlk前辈 我想再问问 Function TableExists(TableName : String):Boolean; Var Sl : TStrings ; Begin Sl := TstringList.Create; // 使用ADO =============================== ADOConnection1.GetTableNames(Sl,True); Result := Sl.IndexOf(TableName)<> -1 ; // 使用BDE =============================== Session.GetTableNames('dbAlias',TableName,False,True,Sl); Result := Sl.Count>0 ; // 擇一使用 =============================== Sl.Free; End; // ============================================================== // 函式應用 ==================================================== Begin If TableExists('abc') Then Begin xxx.SQL.Text := 'Drop Table [dbo].[abc]' ; xxx.ExecSQL; End; xxx.SQL.Text := 'Select * Into #abc From Table1'; xxx.ExecSQL; End 上段代码里的那个函数定义里的(Sl : TStrings ;) sl是任意定义的吗?我已经按照Fishman前辈的提示的去做了,但是有错误提示.不知错误在那?提示如下: "在对应所需名称或序数的集合中,未找到项目." 發表人 - lwd188 於 2005/10/07 21:49:18
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-10-08 01:56:08 IP:61.219.xxx.xxx 未訂閱
// 使用ADO =============================== ADOConnection1.GetTableNames(Sl,True); Result := Sl.IndexOf(TableName)<> -1 ; // 使用BDE =============================== // Session.GetTableNames('dbAlias',TableName,False,True,Sl); // Result := Sl.Count>0 ; // 擇一使用 =============================== 擇一使用哦 Sl 只是個 字串 List, TStringList 是 TStrings 的後代類別.
lwd188
一般會員


發表:13
回覆:33
積分:9
註冊:2005-02-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-10-08 10:40:32 IP:218.25.xxx.xxx 未訂閱
谢谢malanlk前辈 那个我知道,我也选择了,以下是代码: var str:string; begin If TableExists('bb') Then Begin str:='Drop Table bb' ; End; str:= 'Select * Into bb From 户'; ADOQuery7.Close; ADOQuery7.SQL.Clear; ADOQuery7.SQL.Add(str); ADOQuery7.ExecSQL; application.MessageBox('正确!','数据整理完毕!',MB_OK); end; 执行后出现下面的错误提示: "在对应所需名称或序数的集合中,未找到项目."
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-10-09 00:23:48 IP:61.219.xxx.xxx 未訂閱
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, ADODB;    type
  TForm1 = class(TForm)
    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    function TableExists(TableName : String):Boolean;
  public
    { Public declarations }
  end;    var
  Form1: TForm1;    implementation    {$R *.dfm}    function TForm1.TableExists(TableName : String):Boolean;
var
  Sl : TStrings ;
begin
  Sl := TStringList.Create;
  // 使用ADO ===============================
  ADOConnection1.GetTableNames(Sl,True);
  Result := Sl.IndexOf(TableName)<> -1 ;
  Sl.Free;
end;    procedure TForm1.Button1Click(Sender: TObject);
var
  str:string;
begin
  if TableExists('bb') then
  begin
    str:='Drop Table bb' ;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add(str);
    ADOQuery1.ExecSQL;
  end;
  str:= 'Select * Into bb From TestTable';
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add(str);
  ADOQuery1.ExecSQL;
end;    end.
以上程式執行 OK
lwd188
一般會員


發表:13
回覆:33
積分:9
註冊:2005-02-11

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-10-10 10:08:06 IP:218.25.xxx.xxx 未訂閱
谢谢malanlk前辈 前辈试验都正常吗?用的是Access数据库吗? 晕死,我照前辈的试还是不好使,还是出现一下错误提示: "在对应所需名称或序数的集合中,未找到项目."
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-10-10 13:30:20 IP:210.68.xxx.xxx 未訂閱
引言: 前辈试验都正常吗?用的是Access数据库吗? 正常, 是Access
你可以開個新專案, 新 Access 資料庫來測試嗎? 如果有錯誤請列出錯在那一行, 不然不知道怎樣幫你... http://search.microsoft.com/search/results.aspx?qu=800a0cc1&View=msdn&st=b&c=0&s=1&swc=0 http://support.microsoft.com/default.aspx?scid=kb;en-us;190589
lwd188
一般會員


發表:13
回覆:33
積分:9
註冊:2005-02-11

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-10-13 16:57:42 IP:218.25.xxx.xxx 未訂閱
谢谢Fishman和malanlk两位前辈,问体解决了.有你们的帮助真好.
系統時間:2024-11-23 6:36:53
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!