少し付け足しの質問があります(先程、解決したばかりなのですが…)
テーブルを作成する為に以下の様なプログラムを考えました。
try
TTable.DatabaseName := TDatabase.DatabaseName;
TTable.TableName := 'テーブル名';
TTable.DeleteTable;
except
(略)
end;
しかし、何故かテーブルの削除には至らないのです。
この上の方でも同じテーブルを削除しているのですが、その時は削除できています。(流れ的には、作成(古)して削除して作成(新)という流れです)
1つのプロシージャ内では同じテーブルを2回は削除できなのでしょうか。
データーベースは何をお使いでしょうか?
ひょっとして、他で使用中になっていませんか?
一時テーブルを作成しているのでしょうが、私にすれば恐ろしいことです。
データーベースは複数の人が使いますので、突然現れたり消えたりするのは
困ってしまいます。
一般的にはViewで代用します。
> (流れ的には、作成(古)して削除して作成(新)という流れです)
まず、この一連の流れを略さず実際のコードを提示されるのが問題解決の近道と思います。
企業秘密だからだせないんだよ きっと
仕事といえば仕事ですので…でも企業秘密という程ではありません(?)
折角、皆様がレスポンスしているのですし、こちらの都合良い情報だけ公開というのも納得いかないでしょうね。
という訳で説明します。
********************************************************************
(1)テーブル1削除(テーブル1既存の場合エラーの為)
try
DelTbl.DatabaseName := DelDatabase.DatabaseName;
DelTbl.TableName := 'テーブル1';
DelTbl.DeleteTable;
except
end;
(2)テーブル1作成、テーブル2作成
(3)テーブル1をテーブル2にINSERT(テーブル1と2の合体です)
InsQry.DatabaseName := InsDatabase.DatabaseName;
StrSql := 'INSERT INTO テーブル2(フィールド名,…) ';
StrSql := StrSql + 'SELECT テーブル1.フィールド名,… ';
StrSql := StrSql + 'FROM テーブル1';
InsQry.SQL.Clear;
InsQry.SQL.Add( StrSql );
InsQry.ExecSQL;
(4)合体したのでテーブル1は不要(削除)
try
DelTbl.DatabaseName := DelDatabase.DatabaseName;
DelTbl.TableName := 'テーブル2';
DelTbl.DeleteTable;
except
end;
********************************************************************
という流れです。
> (4)合体したのでテーブル1は不要(削除)
> try
> DelTbl.DatabaseName := DelDatabase.DatabaseName;
> DelTbl.TableName := 'テーブル2';
これは、'テーブル1'のタイプミスですか?
(4)合体したのでテーブル1は不要(削除)
try
DelTbl.DatabaseName := DelDatabase.DatabaseName;
DelTbl.TableName := 'テーブル1';
DelTbl.DeleteTable;
except
end;
です。失礼致しましたっ
試してみました。
var
StrSql: string;
begin
Database.DatabaseName := 'C:\';
//
try
DelTbl.DatabaseName := Database.DatabaseName;
DelTbl.TableName := 'テーブル1';
DelTbl.DeleteTable;
except
ShowMessage('テーブル1 not found');
end;
//
DelQry.DatabaseName := Database.DatabaseName;
StrSql := 'CREATE TABLE '''+DelTbl.TableName+''''+
' (LAST_NAME CHAR(20),'+
' FIRST_NAME CHAR(15),'+
' DEPT_NO SMALLINT)';
DelQry.SQL.Clear;
DelQry.SQL.Add(StrSql);
DelQry.ExecSQL;
//
StrSql := 'INSERT INTO '''+DelTbl.TableName+''''+
' (LAST_NAME,FIRST_NAME,DEPT_NO)'+
' VALUES (''通り'',''すがり'',1)';
DelQry.SQL.Clear;
DelQry.SQL.Add(StrSql);
DelQry.ExecSQL;
//
InsQry.DatabaseName := Database.DatabaseName;
StrSql := 'INSERT INTO テーブル2 (LAST_NAME,FIRST_NAME,DEPT_NO) ';
StrSql := StrSql + 'SELECT LAST_NAME,FIRST_NAME,DEPT_NO ';
StrSql := StrSql + 'FROM テーブル1';
InsQry.SQL.Clear;
InsQry.SQL.Add( StrSql );
InsQry.ExecSQL;
//
try
DelTbl.DatabaseName := Database.DatabaseName;
DelTbl.TableName := 'テーブル1';
DelTbl.DeleteTable;
except
ShowMessage('Could not delete テーブル1');
end;
end;
2回めの'テーブル1'削除できます。
Paradox/D6です。
かなり遅くなりましたが、削除できました!!
通りすがりさん、ありがとうございました!!
ツイート | ![]() |