3

LiveCode を使用してこの問題が発生していますが、そこに問題があるのか​​、それとも ODBC ドライバーに関係しているのかはわかりません。

LiveCode で構築されたアプリは、ODBC 経由で SQL Server データベースに定期的に接続し、さまざまなデータを取得します。

データベースを担当するアプリケーションがアップグレードされており、その一環として、すべてのテキスト フィールドが Unicode テキスト フィールドに変換されています。基本的にこれは、以前に varchar として定義されていたフィールドが nvarchar として定義され、以前にテキストとして定義されていたフィールドが ntext として定義されるようになったことを意味します。(ちなみにこれはSQL Server 2008です。)

これまで常に使用してきたクエリを使用して、テキスト全体ではなく 1 文字 (フィールドの最初の文字) を取得するようになりました。今のところ、select クエリで varchar への変換を指定することで回避できます。たとえば、アプリが SELECT id, name FROM tab1 のようなリクエストを作成していた場合、SELECT id, convert(varchar(255) のようなリクエストを作成するようになりました。 , name) AS name FROM tab1

それはうまくいきます-私は以前に取得したものを取り戻します-しかし、(a)それは不器用であり、(b)クライアントが既存のすべてのデータをデータベースに移行しているとき、これは今のところ問題ありませんが、遅かれ早かれ実際にこのアップグレードの利点は、いくつかの Unicode 文字をフィールドに入力することです。

残念ながら、テスト データを挿入するためのデータベースやアプリケーションにアクセスすることはできませんが、この問題が発生すると想定しています。アプリは、入力されたデータを処理していません (ただし、処理していると考えています)。

では、現在の ODBC ドライバーを使用する LiveCode アプリで、nvarchar または ntext フィールドから完全なデータを正しく取得する方法はありますか?

4

3 に答える 3

1

より堅牢な revQueryDatabase ではなく revDataFromQuery を使用している可能性はありますか? 私は revDataFromQuery を使用していませんが、UTF16 をサポートしていない C 文字列関数を使用していると思います。

于 2013-03-19T23:06:36.297 に答える
0

したがって、これに出くわした人の利益のために:問題-ドキュメントの正しいビットのみを読んだ場合に理解する必要があった-は、単純なモードで revDatabaseColumnNumbered を使用していたことが判明しました-

put revDatabaseColumnNumbered(iConnID, iColNum) into tData

...しかし、そのモードはテキストのみを返すことができます。これは実際にはここにあるものではなく、バイナリデータです。したがって、解決策は2番目のモードを使用することです。

get revDatabaseColumnNumbered(iConnID, iColNum, "tData")

... その時点で、完全な Unicode データを取得し、それをどうするかを決定できます。コード パスのバグではなく、revQueryDatabase使用方法のエラーrevDatabaseColumnNumberedです。

私を助けてくれたみんなに感謝します!

于 2014-01-02T18:49:43.657 に答える