フィールドサイズの変更(DB)


佐々木  2008-11-07 22:49:43  No: 32500

こんにちは。

InterBase5 のデータベースにて、ftString で作成されているフィールド(カラム)のサイズをテーブルを削除することなく
プログラム(Delphi2007)から拡張(大きくしたい)することは可能でしょうか?

なお、すでにレコードが登録されております。

よろしくお願いします。


DEKO  2008-11-07 23:49:41  No: 32501

Alter Table で可能だと思います。
(少なくとも IB5.5 ではできた記憶があります)

# 6.0 以前の Interbase は 6.01 或いは
# Firebird 1.0x/1.5x に移行する事をオススメします。


佐々木  2008-11-10 20:54:22  No: 32502

DEKOさん、こんにちは。

レスが遅くなりました。申し訳ございません。

教えていただいた Alter Tableを実行してみたいのですが、エラーになってしまいます。

Query1.Active := FALSE;
Query1.DatabaseName := 'MyDB';
Query1.SQL.Clear;
Query1.SQL.Add('ALTER TABLE test ALTER COLUMN name TYPE ALPHA(60);');
Query1.ExecSQL;

としたところキーワードが無効です  といったエラーになってしまいます。

TQueryで Alterを実行することはできないのでしょうか・・・

どのようにしたら Alter Tableを実行することができるのでしょうか。

引き続き調べます。

ヒントを頂けるとありがたいです。

># 6.0 以前の Interbase は 6.01 或いは
># Firebird 1.0x/1.5x に移行する事をオススメします。

今後の検討材料にしたいと思います。ありがとうございます。


HOta  2008-11-11 03:07:16  No: 32503

FirebirdにALPHA型はないのでは?
VarCharにすれば通りませんか?

プログラムから型の変更は、あまり一般的では無いでしょう。


佐々木  2008-11-11 04:00:21  No: 32504

HOtaさん、こんにちは。

>プログラムから型の変更は、あまり一般的では無いでしょう。

プログラム起動時に拡張されているか、チェックして・・・

と、やっていたら危険な(いつかバグになりそう)気がしてきました。

根本的なところから見直したいと思います。

ありがとうございました。


DEKO  2008-11-11 05:22:45  No: 32505

HOtaさんの仰るように、Interbase/FirebirdにはALPHA型はありません。
Alter Table test ALTER COLUMN name TYPE VARCHAR(60);
でイケると思います。

> 今後の検討材料にしたいと思います。ありがとうございます。
んー、ローカルで使う分にはいいと思うのですが。
http://www.allbsd.org/~hrs/FreeBSD/doc-jp/announce-jp/FreeBSD-SA/01:26
# ご存知ない方が多いのかなぁ...


佐々木  2008-11-11 19:18:08  No: 32506

HOtaさん、DEKOさん、大変申し訳ないのですが、
使用しているデータベースが間違っておりました。

PCにInterBase5がインストールされていたので、てっきりInterBase5が動いているものだと思っていたのですが、正しくはBDEが動いているようです。

すみません、この辺もまだよくわかってないです。

HOtaさん、DEKOさん、その他に時間を割いていただいた方、申し訳ございません。

ALPHA型というのは、SQLエクスプローラーで確認したところ、ALPHA型になっておりました。


HOta  2008-11-12 20:25:28  No: 32507

InterBase5が無いとデータベースを操作できないはずです。
BDEはDelphiとデータベースを接続するものです。


DEKO  2008-11-12 21:16:33  No: 32508

佐々木さんがお使いなのはParadoxなのではないでしょうか?
(BDE Administratorのエリアスでドライバを調べてみてください)
だとしたら、DatabseDesktopでフィールドサイズを変更できたと思います。


佐々木  2008-11-12 23:38:30  No: 32509

HOtaさん、DEKOさん、こんにちは。

ご指摘ありがとうございます。

>BDEはDelphiとデータベースを接続するものです。

なるほど・・・

>BDE Administratorのエリアスでドライバを調べてみてください

Databases → [対象のデータベース] の DEFAULT DRIVER が "PARADOX" となっております。

>だとしたら、DatabseDesktopでフィールドサイズを変更できたと思います。

DatabseDesktop の「再構築」でサイズを変更することができました。

私の関与していなかったデータベースに、既存のソースを参考してテーブルを追加しました。
そして私の作成したアプリでそのテーブルを使用しております。

が、フィールドのサイズを誤ってしまって困っております。

お客様のデータベースのため、DatabseDesktopを使用してフィールドサイズを変更することが困難です。

なんとかアプリからフィールドサイズを変更できないかと・・・

Query1.SQL.Add('ALTER TABLE test ALTER COLUMN name TYPE VARCHAR(60);');
Query1.ExecSQL;

としてみたのですが、エラーになってしまいました。
(キーワードの使用が無効です。キーワード:ALTER)

データを退避させてテーブルを作り変えてしまった方がよろしいでしょうか。


igy  2008-11-13 06:27:42  No: 32510

試していないのですが、

例えば、
  org_field CHAR(16) => CHAR(50)
のようにしたい場合、

ALTER TABLE SOME_TABLE ADD  temp_field CHAR(16);
UPDATE      SOME_TABLE SET  temp_field = org_field;
ALTER TABLE SOME_TABLE DROP org_field;
ALTER TABLE SOME_TABLE ADD  org_field CHAR(50);
UPDATE      SOME_TABLE SET  org_field = temp_field;
ALTER TABLE SOME_TABLE DROP temp_field;

のような感じで、どうですか?


HOta  2008-11-14 05:20:43  No: 32511

ノートパソコンにparadoxを導入して、お客さんのところに持って行き、変更するテーブルをノートパソコンにコピーして、ノートパソコンで変更して、再度お客さんのパソコンに戻せばどうでしょうか?
プログラムから、フィールドの変更も可能なはずですが?


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

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






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