Работа с MS Access

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

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

Работа с MS Access

Сообщение Gorjatschew » 04.01.2009 23:07:41

Здравствуйте!
Возник такой вопросик: как соединить Lazarus и Access? После чтения фака понял, что последним лучше не пользоваться, но это не выход.
Попытавшись соединиться при помощи SdfDataSet в виде
Код: Выделить всё
  SdfDataSet1.FileName:='Путь_к_базе.mdb';
  SdfDataSet1.Active:=true;

получил ошибку Invalid field size : 28381
Когда использовал вместо него ODBCConnection1
Код: Выделить всё
  ODBCConnection1.Driver:='Microsoft.Jet.OLEDB.4.0';
  ODBCConnection1.DatabaseName:='D:\Lazarus-Projects\Access\db1.mdb';
  ODBCConnection1.UserName:='admin';
  ODBCConnection1.Password:='';
  ODBCConnection1.Connected:=true;


Получаю ошибку EODBCException.
Ткните, пожалуйста, как лучше соединить Лазарус с аксесом --- пока нужен минимум: чтобы что-то на DBGrid выводилось.
Заранее спасибо.
Аватара пользователя
Gorjatschew
новенький
 
Сообщения: 23
Зарегистрирован: 15.01.2008 18:57:06
Откуда: Санкт-Петербург

Re: Работа с MS Access

Сообщение GrayEddy » 04.01.2009 23:24:34

Только через ODBC.
1. Создать системный DSN (Панель управления -> Администратирование -> Источники данных (ODBC)), задать имя_источника_данных. Заодно можно и протестировать подключение к БД.
2. ODBCConnection1.DatabaseName = Имя_источника_данных
3. ODBCConnection1.Connected := True;

Если БД не запаролена, то ODBCConnection1.UserName и ODBCConnection1.Password - пустые!
GrayEddy
постоялец
 
Сообщения: 375
Зарегистрирован: 06.05.2005 09:37:56

Re: Работа с MS Access

Сообщение Gorjatschew » 05.01.2009 00:03:59

Спасибо.
Хитро. То есть, как я понимаю, если хочется прикрутить несколько баз --- для каждой свою строчку в настройках прописывать надо?
И такой вопрос. Про вкладку DataAccess в этом случае можно уже забыть? Тогда вывод таблицы должен выглядеть чем-то вроде соединения с ODBCConnection1 SQLQuery, в котором прописывается select * ? Или как-то ещё?
Аватара пользователя
Gorjatschew
новенький
 
Сообщения: 23
Зарегистрирован: 15.01.2008 18:57:06
Откуда: Санкт-Петербург

Re: Работа с MS Access

Сообщение EmeraldMan » 05.01.2009 01:41:32

Gorjatschew, если Access не принципиально, то используй лучше, например, FireBird. Я уже поднимал тут одну тему про Access - у меня были проблемы с кодировкой: в винде-то windows-1251, соответственно в access тоже, а новый Lazarus и его компоненты работают с UTF-8.
Короче говоря, если в базе есть кириллица и не заморачиваться с кодировкой, то про вкладку DataControls тоже можно забыть, т.к. все кириллические слова не покажутся.Это, конечно, можно обойти: делать запросы к базе на кириллице, потом пробегать по записям SQLQuery и выводить, скажем, в StringGrid. Я просто поменял базу на FireBird и теперь появилась возможность проект даже на линукс перевести :)
Аватара пользователя
EmeraldMan
постоялец
 
Сообщения: 149
Зарегистрирован: 16.10.2008 08:41:51
Откуда: Белгород

Re: Работа с MS Access

Сообщение GrayEddy » 05.01.2009 10:20:59

> EmeraldMan
Есть у меня база, Firebird, в кодировке Win1251. И еcть Lazarus 0.9.26. Русские буквы отображаются нормально, как это ни странно.
Используется TIBConnection. Свойство Charset выставлено в utf-8.

Добавлено спустя 9 минут 36 секунд:
> И такой вопрос. Про вкладку DataAccess в этом случае можно уже забыть? Тогда вывод таблицы должен выглядеть чем-то вроде соединения с ODBCConnection1 SQLQuery, в котором прописывается select * ? Или как-то ещё?

1. Положил ODBCConnection1. Как работать с ним - см. выше.
2. Положил TSQLTransaction1. В ODBCConnection1.Transaction увтанавливаешь TSQLTransaction1.
3. Положил TSQLQuery1. В TSQLQuery.Database ставишь ODBCConnection1.
4. В TSQLQuery1.SQL пишешь условие запроса "select * ..."
5. TSQLQuery1.Active := True (проверка условия выполнения запроса).
6. Положил TDataSource1. В TDataSource1.Dataset выставляешь TSQLQuery1.
7. Положил TDBGrid1. В TDBGrid1.Datasource выставляешь TDataSource1.
8. Любуемся полученным результатом :)
GrayEddy
постоялец
 
Сообщения: 375
Зарегистрирован: 06.05.2005 09:37:56

Re: Работа с MS Access

Сообщение EmeraldMan » 05.01.2009 13:05:38

GrayEddy писал(а):Есть у меня база, Firebird, в кодировке Win1251. И еcть Lazarus 0.9.26. Русские буквы отображаются нормально, как это ни странно.
Используется TIBConnection. Свойство Charset выставлено в utf-8.

Так мы же сейчас говорим про ODBCConnection. IBConnection, как мне кажется, намного более отлажен.
Я ладу так и не дал: что бы и в access и через Lazarus русское поле нормально отображалось, получалось где-то нормально, зато где-то иероглиф или ничего.
Аватара пользователя
EmeraldMan
постоялец
 
Сообщения: 149
Зарегистрирован: 16.10.2008 08:41:51
Откуда: Белгород

Re: Работа с MS Access

Сообщение alexs » 05.01.2009 13:20:58

GrayEddy писал(а):Есть у меня база, Firebird, в кодировке Win1251. И еcть Lazarus 0.9.26. Русские буквы отображаются нормально, как это ни странно.
Используется TIBConnection. Свойство Charset выставлено в utf-8.

Клиентская часть птицы автоматом перекодирует все строки - поэтому у тебя всё нормально. А вот акцесс вряд ли так умеет. Или всёж умеет? если умеет - то проблем не будет - а если нет - то надо налету во всех дата сетах для строк руками менть кодировки.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Работа с MS Access

Сообщение Gorjatschew » 05.01.2009 13:27:35

Спасибо, что всё так расписали. Буду сегодня вечером пробовать.
По поводу альтернативных баз --- я пытался уговорить, не получилось. Когда сам буду проект переписывать, восьму что-нибудь типа *sql :)
Если вопросы появятся --- буду спрашивать ещё.
Аватара пользователя
Gorjatschew
новенький
 
Сообщения: 23
Зарегистрирован: 15.01.2008 18:57:06
Откуда: Санкт-Петербург

Re: Работа с MS Access

Сообщение GrayEddy » 05.01.2009 13:42:56

> Клиентская часть птицы автоматом перекодирует все строки - поэтому у тебя всё нормально.

Это далеко не всегда работает :evil: . К примеру, TDBEdit корректно воспроизводит русские символы.
TDBMemo напрочь отказывается отображать содержимое. Лечится так
Код: Выделить всё
with DBMemo1.Lines do begin
  BeginUpdate;
  Text := AnsitoUtf8(DataMod.qryAutoModel.FieldByName('info').AsString);
  EndUpdate;
end;

Проблема не в клиенте 8)
GrayEddy
постоялец
 
Сообщения: 375
Зарегистрирован: 06.05.2005 09:37:56

Re: Работа с MS Access

Сообщение alexs » 05.01.2009 19:09:42

GrayEddy писал(а):TDBMemo напрочь отказывается отображать содержимое

Мемо-поля птица автоматом переконвертит с версии 2.0 - или даже 2.1 - раньше умела только простые строки.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь


Вернуться в Lazarus

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11

Рейтинг@Mail.ru