открытие запроса MySQL, когда запрос выбирает столбцы типа данных varchar в delphi - PullRequest
2 голосов
/ 12 февраля 2012

Я недавно начал с MySql, так что я могу сделать ошибку для начинающих. Любая помощь приветствуется.

Я подключаю базу данных в Delphi, определяю запрос со столбцами типов данных integer, decimal и varchar.

Проблема в том, что когда я выбираю запрос в Delphi и отлаживаю после открытия запроса, столбцы, которые являются varchar, не отображаются как i, если они никогда не выбираются.

Драйвер для разъема odbc является самым последним mysql-connector-odbc-5.1.10

Ответы [ 3 ]

4 голосов
/ 12 февраля 2012

Если вы определили постоянные поля для TQuery в режиме разработки, возможно, вы забыли добавить поле varchar (TStringField) или написали с ошибкой FieldName.Также убедитесь, что поле varchar, а не nvarchar (TWideStringField).

Другим решением является удаление всех постоянных полей из TQuery.

3 голосов
/ 12 февраля 2012

Предположение : Кажется, вы используете dbTables -> BDE -> ODBC -> MySQL путь доступа к данным. BDE пропускает поля с неизвестными типами данных. Вероятно, тип символов Unicode не поддерживается BDE.

Возможные решения :

  • попытаться установить набор символов ANSI для соединения в параметрах соединения ODBC;
  • использовать компоненты доступа к данным dbGo / ADO;
  • использовать компоненты dbExpress с драйвером MySQL dbExpress;
  • использовать сторонние компоненты доступа к данным.
3 голосов
/ 12 февраля 2012

Пример запроса:

SELECT anumber, adecimalnumber, avarchar FROM atable

Пример кода Delphi (выполняется из памяти, поэтому не забывайте о небольших ошибках).

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 совсем не сложно.

...