• 締切済み

SQLite3 の UpdateCommand エラー

SQLite3 の UpdateCommand エラー Windows XP Pro 上で、Visual Studio 2005 Enterprise Edition(VB) を用いて 開発しています。 DB として SQLite3 を使用しているのですが、 あるテーブルのレコードの列を増やしたところ、Update でエラーが出るようになってしまいました。 当該テーブルは1データのみを保持するテーブルで、 "select * from TABLE_XX " で SQLiteDataAdapter を用いてDataSource に読み込ませ、 その内容を画面に表示します。 また、画面から変更された内容は、DataTable の DataRow に反映し DataAdapter の UPDATE メソッドでDBを更新していました。 今回画面の項目が増えた為、テーブルの項目(列)を増やしたんですが、UPDATE メソッドの実行で  「DBConcurrencyException はハンドルされませんでした。」  同時実行違反 : UpdateCommand によって、処理予定の 1 レコードのうち 0 件が処理されました。 のエラーが発生してしまいます。 当該テーブルの列数は23ヶで、先頭列(="ID")がPK(AutoIncrement)です。 増やした列は、既存の列とほぼ同様の取り扱いをしています。 よろしくお願いします。s

みんなの回答

  • paraspor
  • ベストアンサー率26% (4/15)
回答No.1

追加した列のデータ型は何でしょうか? こちらのSQLite.DLL使用ですよね? http://sqlite.phxsoftware.com/

Steed400
質問者

補足

paraspor さん、回答ありがとうございます。 追加した列は複数あり、INTEGER型、TEXT型の混在です。 試行錯誤する中で、試しに追加した列の中のすべてのINTEGER型をTEXT型に置き換えたところ UPDATEメソッドのエラーが発生しませんでした。 既存の列にはINTEGER型の列が存在しているのですが、 追加した列のINTEGER型だけがUPDATEメソッドに対して悪さをしているようです。 単純にINTEGER型が間違っているとは思えませんので、何か他との複合技により UPDATEを阻害されているのでは…と考えています。 一応TEXT型の列に置き換えた上で開発を進め、現在テスト中ですが、現時点では問題は出ておりません。 一見、一件落着っぽいのですが、根本的な解決が見られていない事 や 今後のSqliteでの開発でのDB設計に 大きな不安が残るのも事実です。 また、SQLite.dll の出所は不明です。 ちなみにSQLite.dll のプロパティ(バージョン情報)は ・ファイル バージョン: 1.0.65.0 ・説明:        System.Data.SQLite Interop Library ・著作権:       Released to the public domain 詳細: (コメント)      http://sqlite.phxsoftware.com (ファイル バージョン) 1.0.65.0 (言語)        英語(米国) (正式ファイル名)   SQLite3.DLL.3.6.16 (製品バージョン)   1.0 (製品名)       System.Data.SQLite (内部名)       SQLite.Interop.DLL です。 よろしくお願いします。

関連するQ&A

  • SQLite vs MySQL

    お世話になります。 データベースにアクセスするperl CGIを造ろうとしています。 1データベース・1テーブルのみの単純なつくりで 1レコードはだいたい、intergerが10項目、char[12]程度のtextが10項目、dateが5項目、 全部で10,000レコード程度の小規模なものです。 ユーザ数は特定の約30人程度です。各人、一日に2~3レコードにしか書き込み操作はしないはずです(時刻は重なるかもしれません)。 速度がクリティカルに要求されるわけではありません。 SQLiteとMySQLの比較は、ネット上でも多数見つかり、多数ユーザならMySQL、single userならSQLiteという感想が多いですが、30人というのが「多数」なのか、どうなのかわかりかねましたので、使用実感をお聞かせください。 SQLiteで少し組んでみたのですが、きわめて容易に作れるし、バックアップも簡単なので、30人程度ならSQLiteでも問題なしということであればSQLiteにしたいところです。

    • ベストアンサー
    • MySQL
  • SQlite

    SQLiteを使って メールを保存するデータベースを作っています。 以下のようになっています。  さらに、 アドレス帳を作りたいのですが 新たにデータベースを開くのか 同じデータベースで別のテーブルを開けばよいのかわかりません。 ご存知の方よろしくお願いします。 また、 C++からSQLiteを扱う上での参考書などもありましたら 教えてください。 rc = sqlite3_open(".\\mailbox\\SQMail.db", &db); if( rc ){ AfxMessageBox("Can't open database:", MB_OK); sqlite3_close(db); return; } rc = sqlite3_exec(db, "create table MailTbl (id INTEGER PRIMARY KEY, attach varchar(20), subject varchar(120),addressfrom varchar(80),addressto varchar(80),date varchar(80),size integer,priority integer, read integer, state integer, alldata blob);", callback, 0, &zErrMsg); if( rc!=SQLITE_OK ){ // AfxMessageBox("SQL error:", MB_OK); sqlite3_free(zErrMsg); }

  • VBAとSQLITEでAddNewメソッド

    こんにちは! Access VBAとSQLITEを接続して、SQLITEにデータをインサートしたいと思っています。 ADOを利用して、ADDNEWメソッドでデータを入れたいのですが、うまく動きません。 書いているコードは下記になります。 'ローカル定数 'Xはネットワークドライブ Const DRIVER_NAME As String = "Driver=SQLite3 ODBC Driver;Database=X:\test.sqlite3;" 'コネクト Set CON = New ADODB.Connection Set RS = New ADODB.Recordset CON.ConnectionString = DRIVER_NAME CON.Open 'レコードセット sql = "select * from TABLE1" table = "TABLE1" '↓問題無く通りますが、TABLE1にはデータが1件も存在しません。 RS.Open sql, CON, adOpenDynamic, adLockOptimistic '↓ここで実行エラー 3021 BOFとEOFのいずれかがTrueになっているか、または現在のレコードが削除されています。要求された操作には、現在のレコードが必要です。と表示されます。 RS!F1 = "abc" '↑TABLEにはデータが一件も無い為に、このようなメッセージが表示されると思います。 '↓ODBCドライバは要求されたプロパティをサポートしていません。と表示されます。 RS.Open table, CON, adOpenDynamic, adLockOptimistic 何故、上記のようなメッセージが表示されるのでしょうか?これを解決してAddNewメソッドでデータの挿入を行いたいと思っています。 宜しくお願いします!

  • SQLite3:: escapeString使用法

    SQLite3クラスのメソッドescapeStringを使って、 SQL文の中に挿入する文字列の 浄化(SQLインジェクション対策)をする場合の、 一般的な作法について教えて下さい。 例えば、 //----------------------- //エスケープしたい文字列 $var= "Let's"; //オープンするデータベース $db= ":memory:" $obj = new SQLite3($db); $tmp = $obj->escapeString($var); $db->close(); //----------------------- こんな感じで使おうとしていますが、 「オープンするデータベース」の所が、 ちょっと理解できていません。 とりあえず文字列の浄化だけを行いたい場合には、 必ずしも、DBをオープンする必要はないと思いますので、 オープンするDBなんて、ないですよ! ということで、 :memory: を指定していたりしますが、 この辺りの正しい作法について、どなたか教えて下さい。

    • ベストアンサー
    • PHP
  • sqlite+phpでのテーブル作成

    こんばんは php+sqlite+pdoで掲示板を作ろうと思っているのですが - $db = new PDO('sqlite:test555.db','', ''); $query = "CREATE TABLE テーブル名 (テーブル内容)"; $db->query($query); //以下掲示板表示処理など - とした場合、すでにテーブルが存在していてもエラーが出ずに掲示板のデータを表示してしまいます。 掲示板の機能としてはこれで動いているので問題ないのですが、プログラム的に掲示板にアクセスするたびにCREATE TABLEを実行しても良いものなのでしょうか? 出来ればテーブルが存在しない場合のみにCREATE TABLEを実行したいのですがその場合はどのように書けばいいのでしょうか?

    • ベストアンサー
    • PHP
  • SQLiteのテーブル名を変更したい

    SQLiteで既存のテーブル名を変更し、テーブルのバックアップにしたいと考えています (後に元テーブル名で新しくCreate Tabelをします) 少し(情報の少ない)マニュアルを見ましたが 方法(それを実行させるSQL)が見つけられません アドバイスをよろしくお願いいたします。 あるいは、DB内でテーブルをコピーする方法があるならば それで代用できるかもと考えています。

  • SQLITEで全角テーブルアップデート

    SQLITEで全角テーブルアップデート こんにちは。SQLITEでアップデートをしたいと思っています。問題がテーブル名が全角文字です。 テーブル名: T_在庫 フィールド: 商品コード,在庫 001,3 002,2 003,5 下記のSELECT文は動きます。 SELECT "T_在庫"."商品コード","T_在庫"."在庫" FROM "T_在庫" 次にUPDATEをかけたいと思っています。 UPDATE "T_在庫" SET "T_在庫"."在庫" = 0 [Err] 1 - near ".": syntax error このように表示されます。 試しに、ダブルクォテーションを外しても同じです。 どのようにすればSQLITEでアップデートがかけることができるのでしょうか?文法は間違っていないとは思うのですが・・・

  • yahooウィジェットのSQLiteに関して

    どうしてもわからず、質問させてください。 INSERTの所で 1 near "[i]" :syntax error と出てしまいます。 配列にはちゃんとデータが入っていることを確認しました。 どこがおかしいのかお分かりになる方すいませんが、お願いします。 またyahooウィジェットのSQLiteはトランザクションは使えるのか知っている方いましたら合わせてお願いいたします。 ▼ソースは以下のようなものです var db = new SQLite(); //オープン db.open( "オーブンファイル名" ); //テーブル存在確認 var result = db.query( "SELECT * FROM sqlite_master WHERE type='table' AND name='テーブル名'" ); if ( result.getRow() == null ) { result.dispose(); db.exec( "CREATE TABLE テーブル名(id int(10),name varchar(255))" ); FileRead( "ファイル読み込み" ); for (var i in lineArray) { alert(lineArray[i]); db.exec( "INSERT INTO テーブル名(id, name) VALUES(i, lineArray[i])" ); } } db.close;

  • PHP5でSQLiteが接続エラーを出します

    PHPには初心者です(データベースには多少知識有るはず)。 PHPからSQLに商品データを登録するシステムを作っていますが、データベースに接続することができません。 繋げるためにはどこを直したらよいでしょうか。 データベース名はshop、テーブル名はitemです。 SQLite:バージョン 2.8.17 PHP:バージョン 5.1.6 WindowsXPのプロフェッショナル、eclipse3.2、参考にした本は『eclipseではじめるPHP(http://item.rakuten.co.jp/book/4296315/)』と『基礎PHP(http://item.rakuten.co.jp/book/1711777/)』です。 エラーが出る行 if(!$db = sqlite_open('/../SQLiteManager/shop')){ die("データベース接続エラー.<br/>"); } エラー文 Warning: sqlite_open() [function.sqlite-open]: unable to open database: C:\SQLiteManager\shop in C:\Eclipse\workspace\shop\touroku.php on line 23 データベース接続エラー. PHPのフォルダ内にある 『PHP.iniextension=php_pdo_sqlite.dll』 『extension=php_sqlite.dll』 のコロンは外しました。 SQLiteManagerはworkspaceの中です。 設定が悪いのかファイルを置く場所が悪いのか、それともプログラムが悪いのかもわかりません。 宜しくお願いいたします。

    • 締切済み
    • PHP
  • VB DB更新時にパラメーターへ値のセット

    データベースの更新についてご指導下さい。 VB2010からSQLサーバーのデータベースに接続しております。 dataAdapter.Updateによりデータベースを更新する際の パラメーターへ値をセットする方法を教えて下さい。 テーブル名Test Code Name ------------ A   Suzuki 希望する処理 テキストボックスに入力された名前に変更 例) Suzuki → Yamada ○フォームの変数として定義 Dim dataAdapter As New SqlDataAdapter Dim dataSet As New DataSet ○FormLoad時にSelectCommandとUpdateCommandを設定 Dim SQL As String = "" Dim command As SqlCommand Dim connection As SqlConnection = New SqlConnection(~) SQL = "SELECT * FROM Test WHERE Code = @code " command = New SqlCommand(SQL, connection) dataAdapter.SelectCommand = command dataAdapter.SelectCommand.Parameters.Add("@code", SqlDbType.Char) SQL = "UPDATE Test SET Name = @name WHERE Code = @code" command = New SqlCommand(SQL, connection) dataAdapter.UpdateCommand = command dataAdapter.UpdateCommand.Parameters.Add("@code", SqlDbType.Char) dataAdapter.UpdateCommand.Parameters.Add("@name", SqlDbType.Text, 50) ○データ表示時にはこれで表示されました。 dataAdapter.SelectCommand.Parameters.Item("@code").Value = ComboBoxCode.text dataAdapter.Fill(dataSet) ○このSelectCommandを参考にこのように書いて見たのですが更新されません。 dataAdapter.UpdateCommand.Parameters.Item("@code").Value = ComboBoxCode.Text dataAdapter.UpdateCommand.Parameters.Item("@name").Value = TextBoxName.Text dataAdapter.Update(dataSet) どのようにしたら実行時にパラメーター化したところへデータをセットできるのでしょうか? データセットに値が入っていないのでは?と予想したのですが…。