2012-02-12 3 views
2

最近MySqlで始まったので、私は初心者の間違いをしている可能性があります。どんな助けもありがとうございます。クエリーがデルファイのvarcharデータ型の列を選択したときにMySQLクエリを開く

私はデータベースをDelphiで接続し、データ型integer、decimal、およびvarcharの列を持つクエリを定義します。

問題は、私がDelphiでクエリを選択し、クエリを開いた後でデバッグしたときに、varcharである列が選択されていないと表示されない場合です。

SELECT anumber, adecimalnumber, avarchar FROM atable 

サンプルDelphiコード(メモリからこれを行うので、小さなミスを気にしない):

ODBC接続用のドライバは最新のmysql-コネクタ-ODBC-5.1.10

+3

mysqlクエリとテーブルスキーマを表示してください –

+0

ADOまたはBDEを使用していますか? –

+0

@dzibul、私たちはあなたに賢明な答えを与えることができるように検索コードを示してください – whosrdaddy

答えて

3

:dbTables - > BDE - > ODBC - > MySQLデータアクセスパスを使用しているようです。 BDEは、未知のデータ型のフィールドをスキップします。 BDEでは、Unicode文字タイプはサポートされていない可能性があります。

考えられる解決策

  • は、ODBC接続パラメータの接続のためのANSI文字セットを設定してみてください。
  • dbGo/ADOデータアクセスコンポーネントを使用します。
  • は、dbExpressドライバを使用してdbExpressコンポーネントを使用します。
  • は、3Dパーティーデータアクセスコンポーネントを使用します。
3

サンプルクエリです。

procedure Test; 
var 
    AQuery: TADOQuery; 
    ANumber: integer; 
    ADecimal: Real; 
    AString: string; 
begin 
    AQuery:= TAdoQuery.Create; 
    try 
    AQuery.Connection:= SomeODBCConnection; 
    AQuery.SQL.Text:= 'SELECT anumber, adecimalnumber, avarchar FROM atable'; 
    AQuery.Open; 
    ANumber:= AQuery.FieldByName('anumber').AsInteger; 
    ADecimal:= AQuery.FieldByName('anumber').AsFloat; 
    AString:= AQuery.FieldByName('anumber').AsString; << Gets the varchar. 
    //Use AQuery.Next + test for AQuery.EOF to walk through rows. 
    finally 
    AQuery.Free; 
    end; 
end; 

varcharデータを取得することは、まったく難しくありません。

+0

私はまったく同じものを使用する方法。問題は、varchar型のフィールドにアクセスしようとすると例外が発生することです。 fieldbynameではなくFields [i]で試しましたが、varchar型のフィールドは存在しません。私はドライバが問題かもしれないと思うが、私は最新のものを使用している:( – dzibul

4

あなたがデザインモードであなたのTQueryのための持続フィールドを定義した場合、多分あなたはVARCHAR(TStringField)フィールドを追加するのを忘れ、またはFieldNameをスペルミス。また、nvarcharTWideStringField)ではなく、varcharであることを確認してください。

もう1つの解決策は、TQueryのすべての固定フィールドを削除することです。

関連する問題