こんにちは。
InterBase5 のデータベースにて、ftString で作成されているフィールド(カラム)のサイズをテーブルを削除することなく
プログラム(Delphi2007)から拡張(大きくしたい)することは可能でしょうか?
なお、すでにレコードが登録されております。
よろしくお願いします。
Alter Table で可能だと思います。
(少なくとも IB5.5 ではできた記憶があります)
# 6.0 以前の Interbase は 6.01 或いは
# Firebird 1.0x/1.5x に移行する事をオススメします。
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 に移行する事をオススメします。
今後の検討材料にしたいと思います。ありがとうございます。
FirebirdにALPHA型はないのでは?
VarCharにすれば通りませんか?
プログラムから型の変更は、あまり一般的では無いでしょう。
HOtaさん、こんにちは。
>プログラムから型の変更は、あまり一般的では無いでしょう。
プログラム起動時に拡張されているか、チェックして・・・
と、やっていたら危険な(いつかバグになりそう)気がしてきました。
根本的なところから見直したいと思います。
ありがとうございました。
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
# ご存知ない方が多いのかなぁ...
HOtaさん、DEKOさん、大変申し訳ないのですが、
使用しているデータベースが間違っておりました。
PCにInterBase5がインストールされていたので、てっきりInterBase5が動いているものだと思っていたのですが、正しくはBDEが動いているようです。
すみません、この辺もまだよくわかってないです。
HOtaさん、DEKOさん、その他に時間を割いていただいた方、申し訳ございません。
ALPHA型というのは、SQLエクスプローラーで確認したところ、ALPHA型になっておりました。
InterBase5が無いとデータベースを操作できないはずです。
BDEはDelphiとデータベースを接続するものです。
佐々木さんがお使いなのはParadoxなのではないでしょうか?
(BDE Administratorのエリアスでドライバを調べてみてください)
だとしたら、DatabseDesktopでフィールドサイズを変更できたと思います。
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)
データを退避させてテーブルを作り変えてしまった方がよろしいでしょうか。
試していないのですが、
例えば、
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;
のような感じで、どうですか?
ノートパソコンにparadoxを導入して、お客さんのところに持って行き、変更するテーブルをノートパソコンにコピーして、ノートパソコンで変更して、再度お客さんのパソコンに戻せばどうでしょうか?
プログラムから、フィールドの変更も可能なはずですが?
ツイート | ![]() |