Q75:accessでテーブルを開いたようなテーブル上で変更したり、新規でテーブル上で入力する行が出て、次々入力する形のサンプルはありますか。
Q75-1:
データベースアクセス_3(機能拡張版).mzaxでは更新や挿入が別WINDOWが開いて編集する形になっていますが、accessでテーブルを開いたようなテーブル上で変更したり、新規でテーブル上で入力する行が出て、次々入力する形のサンプルはありますか、もしありましたら、教えてください。
A75-1:
データベースアクセス_3(機能拡張版).mzaxでは更新等にはUpdate文などSQL文を実行して行っています。
今回のお問い合わせの内容では一旦Select文でデータベースの内容を取得して行う「更新可能なResultSetを使ったデータの操作」も可能かと存じます。
更新可能なResultSetを使ったデータの操作は
@startUpdate()
A更新したいデータベース上のテーブルをSelect(全データでなくても可)
Bメソッド実行
CfinishUpdate()
の順で行います。
実行できるSQLメソッドは
・insertRow(3種類)
・updateCell(2種類)
・updateRow
・delateRow
です。
必ず直前・直後をstart/finishUpdate()で挟んでください。そうでないと大量のResultSetをOpenしたままになる恐れがあります。
・insetRowDirectlyもあります
先に対象データをstart/finishUpdate()、Selectする必要はなく、単独で実行できます。
検索結果は全てのデータを取得してくる必要はありません。
IDENTITY列のデータに対してUpdateすることはできませんし、NULL不可の列にデータを入れずにInsertすることはできませんので、ACCESSのような動作とは同じにはならない可能性もあります。
実運用では各テーブル設定に合わせて変更が必要です。
各メソッドの詳細に関してはjavadocをご覧頂くか、お手数でも再度お問い合わせ下さい。
簡単に「データベースアクセスチュートリアル」のサンプルを改変したものを掲載いたします。ご参考になれば幸いです。
ツリーをクリックして、テーブルを表示してから「編集」ボタンを押してください。追加した処理は判り易いように複合コンポーネントに収めず、上位の階層に書いてあります。
接続はSQLServer用に変更してありますので、他のデータベースをご使用の場合はご連絡下さい。
チュートリアルやサンプル通りに画面や処理内容を設定しなければならないということはございません。ご要望、ご不明な点がございましたら、どうぞ再度ご連絡下さい。よろしくお願い申し上げます。
関連ファイル:データベースアクセス(Resultset).mzax
Q75-2:
日頂いたサンプルを試してみると、新規行追加をクリックすると以下のようなエラーが発生します。
データベースのアクセス中にエラーが発生しました[データベースアクセス[ID:2](KEY:”データベースアクセス2”)]
・・・・値にNULLを挿入できません。この列ではNULL値が許可されていません・・
データベース構築する上でNULL値を許可しない列が存在するときにどのように対処すればよいか教えてください。
A75-2:
NULLが許可されていない列を含むデータベースのテーブルにおいてinsertRow()を実行した際、ご連絡頂きましたようなエラーが発生いたします。
これはinsertRow()では各列の値を設定してレコード追加ができないために起こります。
このようなエラーはテーブルの列に対してデフォルト値を設定することにより回避することができます。
先日お送りしましたサンプルやコマンドラインから対処される場合には、適切なSQLコマンドを実行することにより、テーブルの列にデフォルト値を設定することができます。
以下、具体例として2列からなるテーブル(id列[INT]とname列[TEXT]からなり、name列がNULLを許可しない場合)を作成・修正する場合について説明します。
1)テーブル(テーブル名table_name)を作成する場合
以下のようなSQL文を実行しますと、name列のデフォルト値を空文字とするテーブルが作成できます.¥。
CREATE TABLE table_name (id INT IDENTITY PRIMARY KEY, name TEXT NOT NULL DEFAULT '')
2)既存のテーブル(テーブル名table_name)を修正する場合
以下のようなSQL文を実行しますと,既存の列(name列)にデフォルト値(空文字)を設定できます。
ALTER TABLE table_name ADD DEFAULT '' for name
Q75-3:
このサンプルに関して、idにオートナンバーが設定されていると選択行の更新ができません。対処方法はありますか?
エラーの内容:
データベースのアクセス中にエラーが発生しました「データベースアクセス[ID:2](KEY:”データベースアクセス2”)」
(Exception:ID 列 ’社員番号’を更新できません。)
社員番号はIDENTITYを「はい」にしてある。
A75-3:
検索結果は全てのデータを取得してくる必要はありません。
IDENTITY列のデータに対してUpdateすることはできませんし、NULL不可の列にデータを入れずにInsertすることはできませんので、ACCESSのような動作とは同じに
はならない可能性もあります。実運用では各テーブル設定に合わせて変更が必要です。
各データベースソフトによって制限事項がございます。
SQLServerの場合、特に大きく上記2点が問題となるかと存じますが、今回お問い合わせ頂いた点に関しては
@IDENTITY列を含まないようデータを取得する
A代わりにUpdateCellを使用する
といった解決方法が挙げられます。
@、Aで運用上問題が生じる場合は、やはり「更新可能なResultSetを使ったデータの操作」ではなく、Update文を発行しての更新をお試し頂いた方が宜しいかも知れません。