• 締切済み

DBとMDB2接続

DB接続していたものをMDB2接続に変更し、INSERTを行うとエラーが発生しています。 DB接続時はMySQL、MDB2接続ではsql Server を使用しています。 INT型でNULL禁止になっているところに値をNULL(もしくは空文字)で入れると(INSERT直前の値をvar_dumpするとSTRING(0) = > "" となっています)、DB接続の場合は0が登録されています。 文字列型の箇所には0ではなく、そのまま空文字として登録されています。 MDB2接続の場合は、下記のエラーが発生しています。 Error converting data type nvarchar to numeric ソースや使用していすシステムは都合により、掲載できないのですが、質問したいことは、 1、DB接続だと空文字を0に変換する機能になっている? 2、MySQLの使用で空文字を0に変換する?sql Serverだとならないのか。 もしMDB2接続で上記のエラーに対する対策方法があれば教えていただけますか? なお、一つ一つ変更するのが、簡単ですが、量が多いので極力避けたいと考えています。 よろしくお願いいたします。

みんなの回答

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.1

## PHPは使っていないのでよくわかりませんが。 >INT型でNULL禁止になっているところに値をNULL(もしくは空文字)で入れると >(INSERT直前の値をvar_dumpするとSTRING(0) = > "" となっています)、 >DB接続の場合は0が登録されています。 OracleやSQL Serverを使っていると、このこと自体が異常に思えてしまいます。 (Not Null制約が正常に動作していないと思えてしまうため。) ちょっと調べてみたところ、 MySQLの場合、NULL値が許可されない列やInsertでデータを指定していない列に対しては、 何の定義をしていなくても、暗黙のデフォルト値が提供されるらしいです。 ただし、STRICTモードが有効になっているとエラーになるそうです。 (OracleのMySQLからの移行資料があるサイトを参照したらこんな話でした。) たぶん、これで暗黙のデフォルト値0が入っていると思われます。 SQL Serverにはこんな機能はありません。 (Oracleその他のデータベースでも聞いたことないです。  といっても、それほどいろいろなデータベースを知っているわけではないですが。) 逃げ方は? >量が多いので極力避けたいと考えています。 というのが、Insert等の命令の数のことであり、問題になっているテーブルや項目の数が 少ないならDefault値をテーブルに対して明示的に定義すれば同じ動きにはなるはず。 (といってもどんな命令なのかによると思いますが。明示的にNullと書いてあるのか、  単にInsert into tablename(Col1,Col2,・・・) values(・・・)のColに  入っていないだけなのか?試してないので動きは違うかも。  ま、実際に発行している命令をdefaultつけて試してみればわかります。) ## たぶん、これくらいしかないでしょう。 ## SQL Serverでの設定は、確か、できなかったと思うけど、SQL ServerもVersionによって違うし。 ## 対象Versionを書いてもらわないと自分の知っている範囲かどうかも不明。

関連するQ&A

  • MDB接続

    PHP、MDB接続時に下記のようなエラーメッセージが出力されるのですが、原因が今一つ掴めません・・・。 Fatal error: Call to undefined function: query() in /home/h041117455-1087/www/test/yoyaku/studio.php on line 27 プログラムの方では、 <? require_once("MDB.php"); global $db; /********************************* * DB接続 ********************************/ $dsn = "pgsql://nobody:@localhost/yoyaku"; // データベースへ接続 $db = MDB::connect($dsn); if (MDB::isError($err)) { echo "接続NG" . $err; } else { echo "接続OK"; // Ast、Bst予約確認 $sql = "select YOYAKU_CODE from T_YOYAKU where YOYAKU_ID = '" . $l . "'"; $result = $db->query($sql); } と記述しております。 $result = $db->query($sql); の部分でエラーが発生しているのはわかるのですが、原因がつかめません。 申し訳ありませんが、ご教授お願い致します。

    • ベストアンサー
    • PHP
  • MDBパスワード設定済みDBへ接続

    MDBパスワード設定済み(排他オープンからの設定)のDBへ接続を試みているのですが、うまく 接続できません。 ご教授ください。 ASP vbscript <ソース> set objCon=ServerCreateObject("ADODB.Connection") cn1 = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "DataSource=" & Server.path("db.mdb") & ";Jet OLEDB:Database Password=password;" objCon.Open cn1 <エラー> Microsoft JET Database Engine エラー '80040e4d' パスワードが正しくありません。

  • php db 文字化け

    文字コードEUC-JPで開発しています。 題名の通り文字化けします。 どうやらDBからselectやinsertしたときに文字化けをするようです。 selectですと文字化た値が取れますし、 insertでは文字化けするためinsertできずエラーとなります。 sql直前で mysql_query("set names EUC-JP"); も行っています。 テーブルの文字コードはオプションで eucjpms -- UJIS for Windows Japanese としています。 個別に該当カラムもそうしています。 何がまずいでしょうか?

    • 締切済み
    • PHP
  • lastInsertIDを使用方法

    MySQLからSQL Serverでプログラムを動作させようとしています。(サーバーはWindowsServer) 同時にDBからMDB2に変更を行っています。 insertをnextIDで取得した値で登録を行い、 lastInsertIDでその値を取得しようとしているのですが、上手くいかないです。(NULL値が返ります)。 auto_incrementが有効かどうかなどで影響があるという記事を見つけたのですが、 他に対処法が見当たらないのでご存知の方がいましたら教えていただけないでしょうか? よろしくお願いします。

  • 別サーバーのDB同士を結合することは可能でしょうか?

    お世話になっております。 MYSQL5を利用しております。 この度、別サーバーのDB同士を結合することは可能かどうか、もし可能であればサンプルを頂けないかと思い、投稿させて頂きました。 [現在使用しているDBサーバ] kagoyaサーバーのDB(MYSQL) sakuraサーバーのDB(MYSQL) [上記DBを結合させるコードを記述したファイルを置くサーバー] kagoyaサーバー 現在kagoyaサーバーにてそれぞれのDBからそれぞれのDBにアクセスして値を取得するところまでは出来ております。二回SQLを書いているのですが、これを一度でどうしても済ませたいと思い、JOINを使用して結合できないか調べてみました。 http://q.hatena.ne.jp/1178781253 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1113186486?fr=rcmd_chie_detail 上記URLのように、同サーバー内なら可能のようですが、実際にやってみたのですが、「mysql_query($sql, $db);」の第二引数でどちらのDBに接続すればいいかわからず、両方試してみましたがダメでした。(自分が書いたソースを破棄してしまったためうろ覚えなのですが、返ってきたresource はresource #13でした。) 結局できるのかできないのかわからないままの状態です・・・。もしわかる方がいましたら、どうかご教授下さい!よろしくお願い致します!

  • dbへの接続について

    dbへの接続について Visual Basic2008でVBを勉強中の者です。初心者です。 SQL serverと接続するやりかたを参考書を頼りにコーディングして接続などは問題ないのですが、 プロシージャごとに毎回DBへの接続文字列を指定して接続して、、とやっているのですが何か 無駄なことしている気がしてきました。(同じコードが各フォームの各プロシージャにあるので) DBサーバの情報が変わったときなどもコードを修正するのが大変だと思いました。 こういう場合、何かいい方法はありませんでしょうか?

  • Accessの接続先をSQLサーバーからアクセスDBにしたい

    はじめまして、宜しくお願いします。 現在、Access2002、SQLサーバー2000を使ってタイトルのようなことを 実現したいと思っています。 現在作っているファイル名の拡張子はDBにSQLサーバーを使っているので「adp」です。 しかし、システムが完成した後で、扱うデータ量がそんなに多くないことと、SQLサーバーをDBに使うとお金もかかってしまうということが分かったため やはり、アクセスの中だけの閉じたシステム(「mdb」のような状態)にしたいと思っています。 システム自体は完成してしまっているので、mdbファイルとして 作り直すには効率が大変悪いと思っています。 そこでシステムファイルはそのままでDBの接続先だけSQLサーバーから アクセスDBに変えようと思っているのですが、 なかなかうまくいかず、行き詰っています。 もしかして、そのようなことは無理なのでしょうか? もしもなにかお気づきの方が居られましたら、 ご教授宜しくお願いします。

  • DB2の使い方

    WindowsのDB2(v8)でMysqlのように mysql -uroot -pxxx dbname < sql.txt でインポートさせたいのですが、どうすればよいのでしょうか? また,DB2用のODBC接続文字列も知りたいです。 参考になる書籍もご存知の方、教えてください。

  • フォームからDBへの接続

    フォームからDBへのデータ挿入なんですが、どうしてもうまくいきません・・・。 MYSQLへの接続はうまくいくのですが・・・ <? $link=mysql_connect("localhost","****","::::"); mysql_select_db("@@@@@",$link); $sql=" insert into users( passwd, name, name_kana, seibetu, birthday, email, postal_code, xmpf, address1, address2 ) values( '$passwd', '$name', '$name_kana', '$seibetu', '$year-$month-$day', '$email', '$postal1', '$xmpf', '$address1', '$address2' )"; mysql_query($sql,$link); mysql_close($link); ?> 上記がソースです。 bithdayのフォールドはdatetimeで、年はyear月はmonth日はdayとしています なにかおかしいところありますか?

    • ベストアンサー
    • MySQL
  • 2つの異なるサーバーのDBを扱う

    現在、Visual Studio 2005(BASIC) を使って、Aのサーバー(IIS)に画像データを貯めるWebプログラムを作成しようとしています。この管理にはMDB形式のDBを使用する予定です。 ところが、このサービスを利用できるユーザーの管理は、Bのサーバー(UNIX MySQL)のDBで管理されています。 このように、Aのサーバーで動作するWebプログラムからBのサーバーのDBに接続することは可能なのでしょうか?