問題タブ [unixodbc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - ODBCを介したストアドプロシージャの実行
アプリケーションが生成する特定の値のプレースホルダーを使用してSQL文字列をユーザーが入力できるようにするアプリケーションがあります。アプリケーションはプレースホルダーを値に置き換え、さまざまなデータベースバックエンドを介してSQL文字列を実行します。
ODBCバックエンドの場合、SQL strinでSQLExecDirect()を呼び出します。これは、通常のクエリではうまく機能しますが、パラメーターを使用するストアドプロシージャでは失敗します。
このメカニズムを拡張してストアドプロシージャをサポートする簡単な方法はありますか?SQLをどのように書く必要があるか?
私が今考えることができる唯一のことは、SQL文字列の解析を開始し、「呼び出し」が含まれている場合はSQLBindParameter()をn回呼び出すことです。ただし、SQLの解析には注意が必要です。
何か案は ?
動作するSQLの例:SELECT columnA from foo where columnB ='%placeholder'
動作しないSQL:CALL StoredFoo('%placeholder')
php - PHP PDO-ODBC、unixODBC、およびFreeTDSで型指定されたバインドされたパラメーターを使用する
次の設定を使用して、PHPアプリケーションからMS-SQLデータベースにアクセスしています
- RedHat Enterprise Linux 5
- PDOおよびPDO_ODBCを使用したPHP5.2.14
- unixODBC 2.2.11
- FreeTDS 0.82.1.dev.20100810
パラメータ化されていないクエリは正常に機能します。唯一の問題は、「0 [FreeTDS] [SQL Server]無効なカーソル状態(SQLSTATE = 24000)」エラーを回避するために、単一の結果ステートメント(PDOStatment :: closeCursorを使用)でカーソルを閉じることを強制されることです。
しかし、型指定されたバインドされたパラメーターに大きな問題があります。このようなコードを使用する場合:
ここで、両方の列はINTです。「206[FreeTDS][SQL Server] Operand type clash:text is incompatible with int [SQLSTATE=22018]」エラーが発生します。
unixODBCログでは、次のようなものが得られます
ログについての私の理解は、unixODBCが正しいタイプを使用してパラメーターをバインドしようとしているということです。ただし、FreeTDSはこの機能をサポートしていません(IM001は「ドライバはこの機能をサポートしていません」です)。したがって、unixODBCは適切な入力なしで続行します。
誰かがこの診断を確認できますか、より良いのは、FreeTDSの型付きバインドパラメータに関する既知の問題ですか?はいの場合、PHP PDOを使用して動作しますか?構成できますか?
django - Linux 上の Django サイトでの unixODBC の問題が更新時に消える
Django、unixODBC、FreeTDS、Apache2、mod_wsgi について質問があります。これは、以前に SO で尋ねられたこの質問と似ています。
最新の Django、つまり 1.2.3 で実行するように構築された Django Web サイトがあります。ほとんどの場合、管理されたモデルを使用します。セッション情報を除いて、Django によって DB には何も書き込まれず、DB から読み取られるだけです。
問題の DB は、MSSQL 2005 の Windows マシンでホストされています。
Django プロジェクトは Linux マシンでホストされています。これは、Apache2 の mod_wsgi を介して提供されます。DB 接続は、悪名高い FreeTDS と unixODBC のデュオを介して行われます。FreeTDS と unixODBC の両方の最新バージョンが実行されています。Python 側では、pyodbc と django-pyodbc が DB に使用されます。
プロジェクトは、ロード バランサーの背後にある同一の設定で、2 つの Linux ライブ サーバーにデプロイされます。両方が接続する 1 つの DB サーバーがあります。
稼働中の本番サーバーでは、断続的な問題がいくつか発生します。表示するレコードを取得するために DB にクエリを実行するページでは、次のエラーとともに例外がスローされることがあります。
この難問の奇妙な点の 1 つは、このエラーが発生するたびに、Web ブラウザーで更新を押すだけでエラーがクリアされ、DB からフェッチされたレコードでページがレンダリングされることです。
エラーが発生したときにデバッグ出力から生成される SQL は非常に単純です。
もちろん、Django 開発サーバーでは、これは表示されません。mod_wsgi をデーモン モードで実行している開発マシンで、このエラーに何度も遭遇しました。mod_python にデプロイしてテストしましたが、エラーは見られませんでした。次に、埋め込みモードで mod_wsgi をテストしましたが、ここでもエラーは見られませんでした。組み込みモードで mod_wsgi を使用するようにライブ サーバーの設定を変更したと思いますが、それでもエラーが発生することがあります。
私は本当にこれで立ち往生しています。問題の真の原因を突き止めるために何をすべきかわかりません。役立つ情報をすべて提供したかどうかはわかりません。私がしていない場合は、指摘してください。質問を更新します。
コードに何か問題があり、これを引き起こしているとは思いません。その場合、ほとんどまたは常に機能しません。ライブサーバーで.pycファイルのクリア、Apacheの再起動などを試みましたが、役に立ちませんでした。
どんな助けでも大歓迎です。
ありがとう。
更新:「never_cache」デコレータをほとんどのビュー関数に追加しました。おそらく、Django が行う小さなモデルレベルのキャッシングをオフにできることを期待しています。しかし、それはライブサーバーでは実際には何もしませんでした. 私は今、本当にアイデアがありません。
更新 #2sql_sever/pyodbc/base.py
:例外が生成されたコードの周り (django-pyodbc)内にいくつかのログを記録しました。そして、どうやらとらえどころのないエラーが生成された SQL クエリが他にもあります。
c++ - C++ アプリケーションが Informix DB サーバーに接続できない
を使用するアプリケーションがあります (非常に長いため、コードを提供できません) unixODBC
。また、インストールしisql
ました。すべてが正しく構成されているようです-ドライバー、サーバーなど、を使用しているため、isql
問題なくInformix DBに接続しています。しかし、同じ設定を使用している場合でも、アプリケーションが接続できません。返されるエラーは次のとおりです。
それで、ここに「興味深い」部分があります-odbc.ini
ファイルをにコピーする~/.odbc.ini
と/etc/odbc.ini
、すべてがほぼ正常に機能し始めました(「ほぼ」、アプリは1つのDSNに接続できましたが、他のDSNには接続できませんでしたが、それでも何かです)。
また :
INFORMIXDIR も正しく設定されています。~/.odbc.ini
どちらも指していません/etc/odbc.ini
(実際、2番目のものは役に立ちました、とは関係ありません~/.odbc.ini
、試してみました(:)
odbc.ini
正常に動作するため、正しく構成されてisql
います。
さらに情報が必要な場合は、お知らせください。ありがとう (:
php - unixODBCエラー"/usr/lib/libtdsodbc.so.0:間違ったELFクラス:ELFCLASS32"
PHPを介してリモートMSSQLServerデータベースからUnixサーバー上のMySQLデータベースにデータをインポートする必要があるサイトで作業しています。この投稿への回答のおかげで、開発環境(Mac OS X 10.6)ですべてを起動して実行することができました。ただし、現在、サーバー環境(CentOS 5.4)をセットアップしようとしています。unixODBCとFreeTDSをインストールして構成しましたが、接続しようとすると、次のエラーが発生します。
Connection Failed:[unixODBC][Driver Manager]Can't open lib '/usr/lib/libtdsodbc.so.0' : /usr/lib/libtdsodbc.so.0: wrong ELF class: ELFCLASS32
インターネットで見つけたものから、32ビットのunixODBC(またはFreeTDS、よくわかりません)がインストールされているようです(libtdsodbc.so.0はlibtdsodbc.so.0.0.0にシンボリックリンクされています)。 64ビットである必要があります。あれは正しいですか?もしそうなら、どうすれば64ビットバージョンにアップグレードできますか?私はサーバーの第一人者ではなく開発者なので、これは私のサーバーの知識から少し外れています。
ありがとう。
unixodbc - マルチスレッドの同時設定で unixODBC を使用する
理解するのに永遠にかかったので、この質問に答えます。最初から答えがここにあればよかったのにと思います。
問題: 実行時間の長い 1 つの unixODBC クエリが、同じアプリケーションから他のすべてのクエリをブロックします。
質問: どうすればこれを防ぐことができますか。
php - unixODBC + PHP 、無効な文字列またはバッファ長のエラー メッセージ
unixODBC 経由で PHP を使用して AS400/DB2 にアクセスしますが、AS400
の一部のフィールド名は「££..」という名前になっています (変更できません)
そして、PHP ページから SQL クエリを起動しようとしたとき
いつも同じエラーメッセージが表示される
SQL エラー: [unixODBC][IBM][System i Access ODBC Driver] 無効な文字列またはバッファ長。、SQLExecDirect での SQL 状態 S1090
誰かが手がかりを持っている場合。
python - odbcを介してPythonでmysqlに接続する方法
mysql、pyodbc、python2.7をFedora14x64にロードして実行しています。
Odbcinst.iniは次のとおりです。
Odbc.iniは:
Mysql.sockは空ですか?/var/lib/mysql/mysql.sockには0.Bがあります
Pythonスクリプトは次のとおりです。
上記のスクリプトで接続できないようです。isqlを使用して接続します。
MyERROR msg:
Win XPx64では、
エラーメッセージ:
sql-server - SQLServerに接続するRuby
RubyをMicrosoftSQLServerに接続するのに問題があります。Mac OS Xを実行していますが、ターゲット環境はUbuntuLinuxです。
これが私が試したことです:
次に、これらのファイルを次の場所に配置しました/usr/local/etc
。
odbc.ini
odbcinst.ini
freetds.conf
次のように、ファイル内のFreeTDSドライバーへの参照をodbcinst.ini
ODBCドライバーファイルに追加しました。
次に、次のfreetds.conf
ようにファイルでサーバーを構成しました。
odbc.ini
そして最後に、次のようにファイルにODBCDSNを追加しました。
サーバーがオンラインでポートが開いていることを確認できます(telnetおよびyougetsignal.comのポートチェックを使用)。
テストとして、私はこれを行いました:
そして、それはうまく接続しているようでした。無効な値を渡すと、予期されるエラーが発生しました。
最後に私の質問に:
これをRubyに拡張するにはどうすればよいですか?私がこれまで試したことは何もうまくいきませんでした。私はこのように続編を試しました:
そして、私はこのようなエラーを受け取ります:
これは、ドライバー構成が正しく検出されていることを示していますが、何らかの理由で接続できません。
私もこのようにDBIを試しました:
そして、私は同様のエラーを受け取ります。
助言がありますか?私は非常に近いように感じますが、これをトラブルシューティングするために次に何を試すべきかわかりません。
c++ - 255バイトより長い文字列をODBCプリペアドステートメントのパラメータ値として使用できますか?
libodbc++
JDBCと同様に設計されたC++用のODBCラッパーを使用しています。プリペアドステートメントがあります。"INSERT INTO t1 (col1) VALUES (?)"
ここで、t1.col1
はとして定義されていVARCHAR(500)
ます。
を呼び出すとstatement->setString(1, s)
、の値s
はに切り捨てられ255
ます。libodbc ++ライブラリが疑われますが、ODBCにあまり詳しくないので、ラッパーが基盤となるODBCの制限を公開するだけではないことを確認したいと思います。ODBC APIリファレンスは複雑すぎて、すばやく簡単に説明することはできません。率直に言って、それはしたくないので、基本的な質問をすることをお許しください。
注:insert
同じライブラリを介したプリペアドおよびパラメーター化されていないステートメントは、長い値okを挿入するため、MySqlDBの問題ではありません。