lazarus + MySQL - вывод данных

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

lazarus + MySQL - вывод данных

Сообщение masters » 16.09.2009 23:53:42

Прошу помощи...

Давненько не работал с базами, а тем более на Лазарусе вообще с ними не работал. Нужно написать кросс-платформенную програмку для работы с удаленной базой MySQL.

Решил для доступа к базе использовать ЗЕОС.

Вообщем как добавлять, редактировать данные в базе при помощи ZQuery - это понятно. А вот как выводить результаты запросов (в приемлемом виде) так и не понял :(
DBGrid выводит много ненужной инфы - заголовки колонок, которые совсем не нужны. Вместо них хотелось-бы что-то другое написать. Но как DBGrid редактировать так и не понял :(
Может можно результат в обычный StringGrid выводить? Или в структуру какую-нибудь. А редактировать уже через DBEdit или что там еще...

Подскажите пожалуйста, если можно - примерчиком. Заранее благодарен.
masters
новенький
 
Сообщения: 20
Зарегистрирован: 19.08.2009 13:50:59

Re: lazarus + MySQL - вывод данных

Сообщение Vadim » 17.09.2009 05:09:01

У DBGrid есть свойство Columns. Туда можно добавлять необходимые колонки, называть их по своему, в том или ином виде оформлять вывод данных.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: lazarus + MySQL - вывод данных

Сообщение masters » 17.09.2009 08:56:55

Vadim писал(а):У DBGrid есть свойство Columns. Туда можно добавлять необходимые колонки, называть их по своему, в том или ином виде оформлять вывод данных.


Спасибо, просто в StringGrid было свойство Cells, вот я и сбился с толку что его не увидел тут :)
masters
новенький
 
Сообщения: 20
Зарегистрирован: 19.08.2009 13:50:59

Re: lazarus + MySQL - вывод данных

Сообщение masters » 19.09.2009 10:17:50

masters писал(а):
Vadim писал(а):У DBGrid есть свойство Columns. Туда можно добавлять необходимые колонки, называть их по своему, в том или ином виде оформлять вывод данных.


Спасибо, просто в StringGrid было свойство Cells, вот я и сбился с толку что его не увидел тут :)


Че-то не понял как работать с Columns ... Как номер ячейки задавать?

И можно-ли результат запроса вывести в структуру или массив? Например в базе список email и нужно по ним отправить почту.
masters
новенький
 
Сообщения: 20
Зарегистрирован: 19.08.2009 13:50:59

Re: lazarus + MySQL - вывод данных

Сообщение Vadim » 19.09.2009 11:08:08

masters писал(а):Че-то не понял как работать с Columns ... Как номер ячейки задавать?

У DBGrid, в отличие от StringGrid'а, нет собственного хранилища данных, поэтому вопрос "Как номер ячейки задавать?" применительно к DBGrid'у звучит полностью бессмысленно. Если хотите работать с ячейками набора данных, которые отображаются в DBGrid'е, то непосредственно с набором данных и работайте.
К примеру Ваш DBGrid берёт данные из Query1, тогда обращение к текущей строке какой-то определённой колонки будет выглядеть так:
Код: Выделить всё
Query1.FieldByName('Имя_поля').AsНужный_Вам_тип_данных

masters писал(а):И можно-ли результат запроса вывести в структуру или массив?

Можно, если только Вы работаете с набором данных как я описал выше. :)
Код: Выделить всё
For i:=0 To Query1.RecordCount-1 Do
  SendMail(Query1.FieldByName('e-mail').AsString);

Здесь мы предполагаем, что электронные адреса хранятся в поле таблицы под названием "e-mail". Соответственно в цикле проходим все записи набора данных, который делает запрос из Вашей таблицы с адресами, от нулевой записи до RecordCount-1, т.е. кол-во записей всего минус один. И из указанного поля берём адреса, которые там содержаться. Если нужно занести данные в массив - поступаем аналогично.
Со структурой работа несколько иная. Каждая запись структуры - это определённое поле одной строки таблицы. Поэтому делаем так:
Код: Выделить всё
Structura.Field1:=Query1.FieldByName('Название_поля1').AsНужныйВамТипДанных;
Structura.Field2:=Query1.FieldByName('Название_поля2').AsНужныйВамТипДанных;
Structura.Field3:=Query1.FieldByName('Название_поля3').AsНужныйВамТипДанных;
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: lazarus + MySQL - вывод данных

Сообщение masters » 23.09.2009 11:54:03

Vadim писал(а):
masters писал(а):Че-то не понял как работать с Columns ... Как номер ячейки задавать?

У DBGrid, в отличие от StringGrid'а, нет собственного хранилища данных, поэтому вопрос "Как номер ячейки задавать?" применительно к DBGrid'у звучит полностью бессмысленно. Если хотите работать с ячейками набора данных, которые отображаются в DBGrid'е, то непосредственно с набором данных и работайте.
К примеру Ваш DBGrid берёт данные из Query1, тогда обращение к текущей строке какой-то определённой колонки будет выглядеть так:
Код: Выделить всё
Query1.FieldByName('Имя_поля').AsНужный_Вам_тип_данных



Немного не понял. Что писать вместо 'Имя_поля' ? Номер ячейки и столбца таблицы?

Например мне в DBGrid надо поменять заголовки колонок. Строка 0, столбцы с 1 по 5. Не понял как это при помощи Query сделать. И не поменяются ли в данном случае заголовки в самой базе? Т.е. это повлияет только на вывод?

Вообщем не сильно разобрался.
Может попробовать выгружать результаты запроса сразу в StringGrid и там уже с ними работать? Есть плюс - не надо быть все время подключенным к базе (т.к. подключение идет через интернет), если пропадет связь, содержимое DBGrid очистится. А так подключился, сделал запрос, вывел все в StringGrid и сразу отключился от базы.
masters
новенький
 
Сообщения: 20
Зарегистрирован: 19.08.2009 13:50:59

Re: lazarus + MySQL - вывод данных

Сообщение Attid » 23.09.2009 12:15:29

1. почитать что нибуть про работу с БД
2. почитать что нибуть про работу с БД
3. почитать про работу с DB-компонентами


masters писал(а):Что писать вместо 'Имя_поля' ?

писать имя поля.
если запрос select id, name ffrom employee
то имя поля может быть или id или name
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: lazarus + MySQL - вывод данных

Сообщение Vadim » 23.09.2009 12:36:12

masters писал(а):Немного не понял. Что писать вместо 'Имя_поля' ?

Нужно писать именно название поля. Вы знаете что такое название поля? Не хотите купить и прочитать книгу по работе с базами данных?
masters писал(а):Например мне в DBGrid надо поменять заголовки колонок.

Одно из двух:
- либо Вы это делаете в дизайнере,
- либо с помощью кода:
Код: Выделить всё
For i:=0 To DBgrid1.Columns.Count-1 Do
  DBGrid1.Columns[1].Title.Caption:='Ваше_название_колонки';

masters писал(а):трока 0, столбцы с 1 по 5.

Бессмысленный набор звуков, извините. Поясните как можно более подробно, что Вы хотели сказать.
masters писал(а):Не понял как это при помощи Query сделать.

Никак. Это совершенно другое.
masters писал(а):И не поменяются ли в данном случае заголовки в самой базе?

Не повлияет. база и DBGrid - это то же самое, что хлеб и хлебный прилавок.
masters писал(а):Т.е. это повлияет только на вывод?

Совершенно верно.
masters писал(а):Может попробовать выгружать результаты запроса сразу в StringGrid и там уже с ними работать? Есть плюс - не надо быть все время подключенным к базе (т.к. подключение идет через интернет), если пропадет связь, содержимое DBGrid очистится. А так подключился, сделал запрос, вывел все в StringGrid и сразу отключился от базы.

Есть громадный минус - преобразование типов данных каждого поля в строку. На Ваше усмотрение...
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: lazarus + MySQL - вывод данных

Сообщение masters » 23.09.2009 20:10:35

Vadim писал(а):Есть громадный минус - преобразование типов данных каждого поля в строку. На Ваше усмотрение...


База турагенства - все поля текстовые, думаю не проблема.

Еще вопрос, c MySQL еще не работал. Поддерживает ли она вложенные таблицы? Гуглил по этому поводу - ничего не нашел.
masters
новенький
 
Сообщения: 20
Зарегистрирован: 19.08.2009 13:50:59

Re: lazarus + MySQL - вывод данных

Сообщение v-t-l » 24.09.2009 10:42:23

masters писал(а):Еще вопрос, c MySQL еще не работал. Поддерживает ли она вложенные таблицы? Гуглил по этому поводу - ничего не нашел.

Зачем нужны вложенные таблицы, если все описывается связанными таблицами???
Attid писал(а):1. почитать что нибуть про работу с БД
2. почитать что нибуть про работу с БД
3. почитать про работу с DB-компонентами

0. почитать что-нибудь про реляционные базы данных.

Добавлено спустя 18 минут 28 секунд:
Vadim писал(а):
Код: Выделить всё
For i:=0 To Query1.RecordCount-1 Do
  SendMail(Query1.FieldByName('e-mail').AsString);

Если запрос вернул, например, 20 записей, то предыдущий код отправит мыло 20 раз на один и тот же адрес.
Код: Выделить всё
  Query1.First;
  while not Query1.EOF do
  begin
    SendMail(Query1.FieldByName('e-mail').AsString);
    Query1.Next;
  end;
v-t-l
энтузиаст
 
Сообщения: 733
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: lazarus + MySQL - вывод данных

Сообщение masters » 24.09.2009 12:33:19

v-t-l писал(а):
masters писал(а):Еще вопрос, c MySQL еще не работал. Поддерживает ли она вложенные таблицы? Гуглил по этому поводу - ничего не нашел.

Зачем нужны вложенные таблицы, если все описывается связанными таблицами???


Это и имелось ввиду.

С базами не работал уже лет 7, поэтому вспоминается оooчень тяжело. И то работал только в Делфе с Interbase.

Впринципе если я не буду использовать никаких компонентов для работы с данными в БД, то мне проще будет отдельными запросами выбирать данные из нескольких таблиц, чем связывать их по полям.

Спасибо - пошел разбираться :) Думаю что-то из этого получиться.
masters
новенький
 
Сообщения: 20
Зарегистрирован: 19.08.2009 13:50:59

Re: lazarus + MySQL - вывод данных

Сообщение masters » 09.10.2009 10:51:06

Помогите с кодировкой в MySQL. Программа работает нормально, а вот в phpmyadmin одни закарючки.

Если базу создаю в cp1251_general_ci, тогда программа не видит русского ...
masters
новенький
 
Сообщения: 20
Зарегистрирован: 19.08.2009 13:50:59

Re: lazarus + MySQL - вывод данных

Сообщение Light13 » 09.10.2009 12:25:05

Аватара пользователя
Light13
постоялец
 
Сообщения: 127
Зарегистрирован: 17.07.2009 07:50:10
Откуда: Челябинск

Re: lazarus + MySQL - вывод данных

Сообщение v-t-l » 09.10.2009 13:53:00

Если используешь ZEOS, то в ZConnection.Properties добавь строчку
Код: Выделить всё
codepage=UTF8
, или UTF-8, или как там в MySQL называется кодировка.
v-t-l
энтузиаст
 
Сообщения: 733
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: lazarus + MySQL - вывод данных

Сообщение masters » 09.10.2009 21:42:42

v-t-l писал(а):Если используешь ZEOS, то в ZConnection.Properties добавь строчку
Код: Выделить всё
codepage=UTF8
, или UTF-8, или как там в MySQL называется кодировка.


мне наоборот надо, чтоб он в базу в cp1251 сохранял

а то делаю поле 20 символов, а туда всего 10 русских влазит :(
masters
новенький
 
Сообщения: 20
Зарегистрирован: 19.08.2009 13:50:59

След.

Вернуться в Базы данных

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

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

Рейтинг@Mail.ru