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

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

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

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

Сообщение Sergio » 16.06.2012 00:38:57

Использую 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;

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

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

Сообщение Ism » 16.06.2012 00:44:39

Если есть у сервера способ задать кодировку клиента
Но так как Микрософт то возможно MS SQL работает только в кодировке windows 1251
может помочь только это viewtopic.php?f=5&t=8057
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

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

Сообщение Mr.Smart » 16.06.2012 01:03:04

Ism к сведению. Еще и UCS-2, частный случай UTF-16, но стандартным компонентам работы с ODBC это не поднять!
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

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

Сообщение Ism » 16.06.2012 01:19:27

То есть только избранные могут работать с MS SQL , но это лечится ссылкой выше
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

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

Сообщение Sergio » 16.06.2012 01:23:34

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

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

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

Работают же из лазаря с MSSQL, значит есть решение. Может какие библиотеки или компоненты есть самописные?
Zeos не поможет с MSSQL 2008 :(
Sergio
незнакомец
 
Сообщения: 3
Зарегистрирован: 16.06.2012 00:24:28

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

Сообщение Ism » 16.06.2012 01:31:19

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

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

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

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

Сообщение Sergio » 16.06.2012 01:47:12

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

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

Добавлено спустя 15 минут 29 секунд:
Помогло, спасибо!
Для меня было неожиданностью, что lazarus и в винде UTF8 использует.
Sergio
незнакомец
 
Сообщения: 3
Зарегистрирован: 16.06.2012 00:24:28

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

Сообщение Mr.Smart » 16.06.2012 12:29:23

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

Реализовать самостоятельно интерфейс к драйверу ODBC не так сложно. Документации полно и подключайся хоть к MS SQL 2012.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

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

Сообщение Brainenjii » 16.06.2012 12:33:38

viewtopic.php?f=10&t=4899 - вот ещё проект
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

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

Сообщение xcod » 16.06.2012 12:45:32

вроде в последних свн ревизиях лазаря в палитре компонентов sqldb появились отдельные компонент для доступа к mssql
мжт с ним лучше будет
сам правда не пробовал :)
xcod
постоялец
 
Сообщения: 108
Зарегистрирован: 07.08.2009 12:37:23


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 252

Рейтинг@Mail.ru