ODBCConnection + MSSQL знаки вопроса вместо русских букв

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Sergio
незнакомец
Сообщения: 3
Зарегистрирован: 16.06.2012 00:24:28

ODBCConnection + MSSQL знаки вопроса вместо русских букв

Сообщение Sergio »

Использую Lazarus 0.9.30.4, fpc 2.6.0 SVN revison 35940 (32bit) на Windows 2008 R2 Standard и MS SQL Server 2008 Express Edition
Соединение устанавливаю через TODBCConnection + использую стандартные TTransaction, TQuery и TDBGrid.
Проблема в том, что вместо русских букв - знаки вопроса, причем в БД использовал и varchar и nvarchar и text.
Если сталкивались с проблемой подскажите где копать?

Добавлено спустя 4 минуты 31 секунду:
Пример использовал отсюда:http://wiki.lazarus.freepascal.org/ODBCConn

Код: Выделить всё

procedure TForm1.Button1Click(Sender: TObject);
var
  S: String;
  conn: TODBCConnection;
  query: TSQLQuery;
  transaction: TSQLTransaction;
 
begin
  conn := TODBCCOnnection.Create(nil);
  query := TSQLQuery.Create(nil);
  transaction := TSQLTransaction.Create(nil);
  try
    try
      conn.HostName := '127.0.0.1';
      conn.DatabaseName := 'diary'; {replace this with the name of your database}
      conn.Transaction := transaction;
      conn.UserName:= 'db_username';
      conn.Password:= '';
      query.DataBase := conn;
      { The following line is required, else you get "could not retrieve primary key metadata".
        I was really stuck on this until I found http://bugs.freepascal.org/view.php?id=13241 }
      query.UsePrimaryKeyAsKey:=false;
      query.SQL.Text := 'select * from diary.dbo.journal_entries';
      query.Open;
      S := '';
      while not query.EOF do
      begin
        S := S + query.FieldByName('journal_entry').AsString + #13#10;
        query.Next;
      end;
    finally
      query.Free;
      conn.Free;
    end;
  except
    on E: Exception do
      ShowMessage(E.message);
  end;
  Memo1.Text:= S;
end;

При использовании этого примера хорошо видна проблема русских букв, при условии их наличия в поле таблицы
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

Если есть у сервера способ задать кодировку клиента
Но так как Микрософт то возможно MS SQL работает только в кодировке windows 1251
может помочь только это viewtopic.php?f=5&t=8057
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Ism к сведению. Еще и UCS-2, частный случай UTF-16, но стандартным компонентам работы с ODBC это не поднять!
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

То есть только избранные могут работать с MS SQL , но это лечится ссылкой выше
Sergio
незнакомец
Сообщения: 3
Зарегистрирован: 16.06.2012 00:24:28

Сообщение Sergio »

Если есть у сервера способ задать кодировку клиента
Но так как Микрософт то возможно MS SQL работает только в кодировке windows 1251
может помочь только это viewtopic.php?f=5&t=8057

У меня клиент на винде, а не в линухе, поэтому конвертация в UTF8 здесь не поможет.
Поковыряю еще модуль lconvencoding может наведет на какие мысли..

Еще и UCS-2, частный случай UTF-16, но стандартным компонентам работы с ODBC это не поднять!

Работают же из лазаря с MSSQL, значит есть решение. Может какие библиотеки или компоненты есть самописные?
Zeos не поможет с MSSQL 2008 :(
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

У меня клиент на винде, а не в линухе, поэтому конвертация в UTF8 здесь не поможет.

Лазарус в UTF8 в винде работает

При подмене потоков как в ссылке датасет будет возвращать в нужной кодировке
Sergio
незнакомец
Сообщения: 3
Зарегистрирован: 16.06.2012 00:24:28

Сообщение Sergio »

Лазарус в UTF8 в винде работает
При подмене потоков как в ссылке датасет будет возвращать в нужной кодировке

Спасибо, попробую.

Добавлено спустя 15 минут 29 секунд:
Помогло, спасибо!
Для меня было неожиданностью, что lazarus и в винде UTF8 использует.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Sergio писал(а):Работают же из лазаря с MSSQL, значит есть решение. Может какие библиотеки или компоненты есть самописные?Zeos не поможет с MSSQL 2008

Реализовать самостоятельно интерфейс к драйверу ODBC не так сложно. Документации полно и подключайся хоть к MS SQL 2012.
xcod
постоялец
Сообщения: 108
Зарегистрирован: 07.08.2009 12:37:23

Сообщение xcod »

вроде в последних свн ревизиях лазаря в палитре компонентов sqldb появились отдельные компонент для доступа к mssql
мжт с ним лучше будет
сам правда не пробовал :)
Ответить