問題タブ [uib]

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.

0 投票する
2 に答える
20122 参照

delphi - Firebirdのエラーメッセージ「後続のステートメントの正常な実行を妨げるシステムエラーが原因で実行に失敗しました」

私のアプリケーションは、Firebirdデータベースにアクセスするときにこの種のエラーを生成することがあります。

後続のステートメントの正常な実行を妨げるシステムエラーが原因で実行が失敗したGDSコード:335544726-SQLコード:-902-エラーコード:406 '

何が問題なのですか?これをデバッグする方法はありますか?

私はWindows7でFirebird2.5.1を実行しています。少なくともPythonを使用したkinterbasdbと、Delphiを使用したUIBコンポーネントがあります。

0 投票する
0 に答える
699 参照

character-encoding - Windows文字セットに基づいて文字列を変更するFirebirdを停止します

1.5.5 Firebird組み込みエンジンを使用するアプリケーション(Delphiで記述)があります。アプリケーションは現在デプロイされているFirebirdデータベースで動作し、新しい組み込みエンジンではデータベースファイルが正しく開かないため、このエンジンを使用しています(ODS10.1)。データベース内のすべての文字列は、Nが変化するVARCHAR(N)として定義されます。アプリケーションは以前はANSIアプリケーションであったため、データにはISO-latin-1文字が含まれています。これで、アプリケーションがUnicodeアプリにアップグレードされました。Unicode文字を既存のデータベース(約1万インスタンス)に格納するために、UTF8-BOM(呼び出し可能な場合)を記述します。その後、文字列の残りの部分はUTF8と見なされ、データベースレイヤーによってデコードされます。このようにして、既存のすべてのデータベースを使用しながら、すべてのUnicode文字を使用できます。

これは、西ヨーロッパのすべてのマシンでうまく機能します。ただし、アプリケーションがルーマニア(ルーマニア語設定のWindows PC)で実行されている場合、データベースエンジンが文字を変更します。例:UTF8文字ストリングは、文字オクテットEF(ï)で始まります。データベースエンジンはそれをオクテット69(i)として返します。

この問題は、既存のデータベースでどのように解決できますか?

注意:データベースを開くときに(UIBライブラリを使用して)文字セットOCTETSを指定しようとしましたが、文字セットが不明であるため失敗します。

問題がUIB(この場合に使用されるデータベースレイヤー)内にあることがわかりました。UIBは、バイト単位の文字列(データ型AnsiString)を指定すると、バイトを単語に拡張するだけでUnicodeStringに変換され、さらに現在のスレッドのコードページで縮小されるようにcsNONEを処理します。ルーマニアはコードページとしてiso-latin-1を使用していなかったため、データが破損しています。

今のところ、UIBLibで次のルーチンを変更しました(たとえば、ansistringが指定され、charsetがnoneで、ansistringパラメーターが要求された場合->変換をまったく行わない場合)。

次に、この動作がライブラリに対して正しいかどうかを確認し、メンテナにパッチを適用する必要があります。

0 投票する
1 に答える
2141 参照

delphi - UIB で Firebird トランザクション分離レベルを使用するには?

ドキュメントによると、Firebird には 4 つのトランザクション分離レベルがあります。ただし、私の知る限り、uibライブラリ (TUIBTransaction) には明示的な分離レベルの選択はありませんが、トランザクションのオプションはたくさんあります。それらをどのように使用すればよいですか?ドキュメントはどこかにありますか?

0 投票する
1 に答える
365 参照

delphi - Delphi 2010、UIB、Firebird: パラメータ名の重複

Delphi 2010 と UIB を使用して Firebird データベースにアクセスしています。

クエリを実行しようとしています

ステートメントで名前付きパラメーターをそれぞれ 2 回使用していることに注意してください。

TUIBQuery で準備すると、ParamCount=2 と DX という名前の 2 つのパラメーターが得られます。コードをトレースすると、TSQLParams.Parse が my SQL を渡し、AddFieldA を 4 回呼び出していることがわかります。重複が認識され、FXSQLDA の末尾に追加されていることがわかりますが、FParamCount はインクリメントされていません。

一時的なばかげた修正として、このようなインクリメントを追加し、(DX、DX、POSTCODE、POSTCODE) をパラメーター リストとして取得するようになりました。そういう作品です。

質問:

  • 私が試みているパラメータの再利用は Firebird でサポートされていますか?
  • UIBで?
  • 私の修正は実行可能ですか?
  • より良い修正はありますか?
0 投票する
0 に答える
150 参照

delphi - 空の結果でクエリを再実行すると古いデータが返される

Delphi 2010 アプリケーションで uib を使用しています。さまざまなパラメーターを使用して複数の実行で TUIBQuery コンポーネントを再利用します。パラメータ値が空のデータセットを返す場合、フィールドへのアクセスは古いデータを返します。

ここに私がしていることの疑似コード表現/抜粋があります:

最後の後に私が得るのOpen()

そのため、結果セットが空であることは認識していますが、名前でフィールドにアクセスするときに、結果セットが古いパラメーター値に対して空ではなかったときにクエリされた aFieldName の値を返します。

フィールドに を与えるほうがいいと思いNULL (or 0 as I access AsInteger())ます。

私の回避策は のテストですEof=Bof=trueが、もっとエレガントな方法はありますか?

私の実際のコードでは、2 つのOpen()呼び出しは別々の Web リクエストにあります。を呼び出すときにフィールド値を明示的にリセットする方法はありますClose()か?

これを読んで、少し考えてくれてありがとう。

0 投票する
0 に答える
132 参照

delphi - Database.Charset=csUTF8 を読み戻すと、TUIBQuery のパラメータ値が切り捨てられる

UIB を使用して Firebird 2.5 データベースに接続する、Delphi 2010 で構築されたアプリケーションに取り組んでいます。アプリケーションは長い間デフォルトの文字セットを使用して実行されてきました。つまり、誰も文字セットに特別な考えを与えず、単に機能していました。現在、UTF-8 データで正しく動作するようにしようとしています。

そうすることで、TUIBQuery とパラメーター化されたクエリで問題が発生しました。Database.Charset=csUTF8CHAR(n) フィールドのパラメーター値を使用および設定し、クエリを実行する前にそれを取得すると、値が切り捨てられます。

残念ながら、私のコードのいくつかは、このようなパラメーターをさまざまな場所で読み書きするため、醜い死を迎えます。

問題を切り分けて実証するために、DEFAULT CHARACTER SET UTF-8次のようなテーブルを使用して単純な新しいデータベースを作成しました。

TUIBDatabase と TUIBTransaction を使用してデータベースに接続するようにアプリケーションをセットアップしました。次に、TUIBQuery インスタンスを作成し、SQL をこのテーブルへのパラメーター化された INSERT ステートメントに設定し、パラメーターを設定します。

パラメータ値を次のように読み戻すと、次のようになります。

の結果は正しいですDatabase.Charset=csNone。しかし、代わりDataBase.Charset=csUTF8にCHARFIELDの値を指定すると、の'A'代わりに切り捨てられ'ABC'ます。VARCHARFIELD の値は問題ありません。この動作は実際のデータとは無関係です。サンプルが示すように、実際に非 ASCII 文字を使用してそれを誘発する必要はありません。

クエリでの ExecSQL() の呼び出しは正しく機能し、どちらの場合も期待どおりにデータを挿入します。

ソースコードをUIB_UTF8_Test.zipとして簡単なテスト プログラムにアップロードしました。

ここの誰かが、私が間違っている可能性があることと、それを正しく行う方法を知っていますか?

0 投票する
1 に答える
50 参照

angularjs - if 関数 ANGULARJS を使用してさまざまな Uib-alert を表示する

nodejs バックエンドから変数を取得する if 関数を使用して、さまざまなアラートを表示するにはどうすればよいですか? 私のhtmlスタンドでは:

私のAngularJSファイルで:

しかし、これはうまくいきません。誰でも助けることができますか?