TTablel.DeleteTableについての質問

解決


小雪  2005-02-04 04:24:45  No: 13028

少し付け足しの質問があります(先程、解決したばかりなのですが…)
テーブルを作成する為に以下の様なプログラムを考えました。

  try
    TTable.DatabaseName := TDatabase.DatabaseName;
    TTable.TableName    := 'テーブル名';
    TTable.DeleteTable;
  except
    (略)
  end;

しかし、何故かテーブルの削除には至らないのです。
この上の方でも同じテーブルを削除しているのですが、その時は削除できています。(流れ的には、作成(古)して削除して作成(新)という流れです)
1つのプロシージャ内では同じテーブルを2回は削除できなのでしょうか。


HOta  2005-02-04 06:37:36  No: 13029

データーベースは何をお使いでしょうか?
ひょっとして、他で使用中になっていませんか?

一時テーブルを作成しているのでしょうが、私にすれば恐ろしいことです。
データーベースは複数の人が使いますので、突然現れたり消えたりするのは
困ってしまいます。
一般的にはViewで代用します。


通りすがり  2005-02-04 07:24:00  No: 13030

> (流れ的には、作成(古)して削除して作成(新)という流れです)
まず、この一連の流れを略さず実際のコードを提示されるのが問題解決の近道と思います。


.  2005-02-04 08:05:02  No: 13031

企業秘密だからだせないんだよ  きっと


小雪  2005-02-04 18:41:56  No: 13032

仕事といえば仕事ですので…でも企業秘密という程ではありません(?)
折角、皆様がレスポンスしているのですし、こちらの都合良い情報だけ公開というのも納得いかないでしょうね。
という訳で説明します。

********************************************************************
  (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;
********************************************************************

という流れです。


通りすがり  2005-02-04 19:14:02  No: 13033

>  (4)合体したのでテーブル1は不要(削除)
>  try
>    DelTbl.DatabaseName := DelDatabase.DatabaseName;
>    DelTbl.TableName    := 'テーブル2';
これは、'テーブル1'のタイプミスですか?


小雪  2005-02-04 19:17:02  No: 13034

(4)合体したのでテーブル1は不要(削除)
  try
    DelTbl.DatabaseName := DelDatabase.DatabaseName;
    DelTbl.TableName    := 'テーブル1';
    DelTbl.DeleteTable;
  except

  end;

です。失礼致しましたっ


通りすがり  2005-02-04 19:26:39  No: 13035

試してみました。
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です。


小雪  2005-02-10 20:54:32  No: 13036

かなり遅くなりましたが、削除できました!!
通りすがりさん、ありがとうございました!!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加