sqlite и dbgrid

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

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

sqlite и dbgrid

Сообщение julius » 09.12.2010 15:08:31

Подскажите пожалуйста где можно почитать на русском как работать с бд в лазарусе.
У меня получается только добавлять в бд записи а как удалять и редактировать?
Можно ли редактировать сразу в dbgrid?
julius
незнакомец
 
Сообщения: 4
Зарегистрирован: 09.12.2010 15:04:51

Re: sqlite и dbgrid

Сообщение Kitayets » 09.12.2010 17:12:20

можно.

Добавлено спустя 6 минут 52 секунды:
возьми любую книжку по delphi и БД на русском языке. не смотри примеры где используются TDataSet, TTable, TClientDataSet, borland BDE, BDE Express и TADO*. Смотри примеры с TSQL. Помни, что цепочка должны быть примерно такой T*Connection -> TSQL/TTransact -> TDataSource ->TDB*.
В TSQL задай все свойства *SQL (updateSQL, deleteSQL).
Kitayets
постоялец
 
Сообщения: 171
Зарегистрирован: 05.05.2010 21:15:24

Re: sqlite и dbgrid

Сообщение julius » 12.12.2010 18:07:11

ясно буду искать, вопрос еще про столбцы в датагриде. Тоесть если поставить авто размер столбцов то он сам все выравнивает, а если добавлять самому столбцы через параметры то он им присваивает титл1 титл2 и тд... как поменять эти титлы и их размер и что бы туда выводились нужные значения. Тоесть если недобавляю стобцы то он выводит всю таблицу с названием стобцов как в таблице базы если создаю хоть 1 стобец сам то он ничего невыводит(
julius
незнакомец
 
Сообщения: 4
Зарегистрирован: 09.12.2010 15:04:51

Re: sqlite и dbgrid

Сообщение alexmai » 19.12.2010 19:16:19

alexmai
постоялец
 
Сообщения: 106
Зарегистрирован: 02.02.2009 14:58:42

Re: sqlite и dbgrid

Сообщение starling13 » 26.12.2010 21:48:18

Решил написать здесь не создавая новую тему.
Сделал тестовый пример с Sqlite3.
БД:
Код: Выделить всё
CREATE TABLE "Люди"
(
   "ID" INTEGER NOT NULL,
   "ФИО" VARCHAR(128) NOT NULL,
   "e-mail" VARCHAR(50),
   "Дата рождения" DATE,
   PRIMARY KEY ("ID")
)

Приложение:
1. Модуль данных - SQLite3Connection, SQLTransaction, SQLQuery.
2. У SQLQuery SQL = SELECT * FROM "Люди"; UpdateSQL и InsertSQL - пусто.
UsePrimaryKeyAsKey = True
UpdateMode = upWhereKeyOnly (Выражение UPDATE/DELETE будет использовать только ... WHERE "ID" = ...)
Добавлены поля для всех клонок таблицы. У ID required = false,
ProviderFlags = [pfInUpdate,pfInWhere,pfInKey]
У остальных полей ProviderFlags = [pfInUpdate]
3. На форме
DataSource, DBGrid, DBNavigator.
В DBGrid есть колонки на все поля SQLQuery кроме ID (ему передаётся NULL при INSERT и в SQLite срабатывает Autoincrement)
На событиях AfterDelete и AfterPost стоят SQLQuery.ApplyUpdates


В Ubuntu всё прекрасно работает (добавление, модификация, удаление), в Windows XP поля e-mail и "Дата рождения" вызывают проблему. SELECT проходит, а при вставке/редактировании в DBGrid возникает ошибка:
не найдено поле "e" и "Дата".
Если изменить поля в таблице на "email" и "ДатаРождения", то естественно работает.

Отчего такая разница?
Пример1.zip
У вас нет необходимых прав для просмотра вложений в этом сообщении.
starling13
незнакомец
 
Сообщения: 5
Зарегистрирован: 26.12.2010 21:16:01

Re: sqlite и dbgrid

Сообщение Vadim » 27.12.2010 06:46:38

starling13
В Windows всегда были проблемы с чтением пробелов. Для примера, попробуйте вывести в консоли список файлов из каталога "Program files". Если Вы это название не заключите в кавычки, то сей каталог просто не будет найден, т.к. вместо одного получается два каталога. ;)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: sqlite и dbgrid

Сообщение starling13 » 27.12.2010 15:19:13

Спасибо за ответ. Но наверно это стоит поместить в баги, т.к. СУБД поддерживает такой способ описания идентификаторов (в двойных кавычках с пробелами, национальными и специальными символами), а компоненты доступа не совсем. Проблема похоже на этапе автоматического формирования SQL запросв INSERT/UPDATE.
В описанном примере возникает ошибка "не найдено поле e" (это от e-mail)
Если руками написать updateSQL: UPDATE "Люди" SET ... "e-mail" = :"e-mail" ... , то ошибка: не найдено поле ""e-mail"" - то есть сам параметр кавычками обрамил, и мои помешали. Если написать UPDATE "Люди" SET ... "e-mail" = :e-mail,
то таже ошибка про поле e.
starling13
незнакомец
 
Сообщения: 5
Зарегистрирован: 26.12.2010 21:16:01

Re: sqlite и dbgrid

Сообщение dunin » 27.12.2010 15:48:15

starling13 писал(а):Спасибо за ответ. Но наверно это стоит поместить в баги, т.к. СУБД поддерживает такой способ описания идентификаторов (в двойных кавычках с пробелами, национальными и специальными символами), а компоненты доступа не совсем. ...

У меня вот возникает вопрос: а для чего вообще нужен "такой способ описания идентификаторов"? :|
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: sqlite и dbgrid

Сообщение Vadim » 28.12.2010 05:53:26

starling13
А Вы попробуйте обрамлять названия обратными апострофами, который на кнопке "Ё". Или, если речь идёт именно о sqlite, все названия полей и таблиц заключать вместо ковычек в квадратные скобки. А потом напишите, что получилось. ;)
Код: Выделить всё
UPDATE [Люди] SET ... [e-mail] = :e-mail,
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: sqlite и dbgrid

Сообщение starling13 » 21.01.2011 22:57:04

UPDATE [Люди] SET ... [e-mail] = :e-mail,

Нет, это не помогло. Та же ошибка. Ошибка именно в имени параметра
Код: Выделить всё
:e-mail

Имена параметров похоже обрамляются кавычками, то есть, как я писал уже, если будет:
... "e-mail" = :"e-mail" ... , то пишет: не найден параметр ""e-mail""

И ещё повторюсь: в Ubuntu для БД с таблицей "Люди", состоящей из полей "ID", "ФИО", "e-mail", "Дата рождения" достаточно написать в свойстве SQL 'SELECT * FROM "Люди"'.

Раз один и тот же код работает по разному в двух ОС, - это баг. То ли в Lazarus для Windows, то ли в SQLIte3 для Windows.
Предлагаю описать пример разработчикам.

Добавлено спустя 16 минут 41 секунду:
У меня вот возникает вопрос: а для чего вообще нужен "такой способ описания идентификаторов"?


Он очень важен. Я ещё не выяснил до конца, но ANSI SQL-92 определяет:
...
5.4 Names and identifiers
Function
Specify names.
Format

<identifier> ::=
[ <introducer><character set specification> ] <actual identifier>

<actual identifier> ::=
<regular identifier>
| <delimited identifier>
...


Я не понял только, определяет ли стандарт какие именно делимитеры нужно использовать, но почти все СУБД используют двойные кавычки. Не работал с MySQL, но кажетсчя он может и ` , и " . Только M$ как всегда умнее всех и у них []
starling13
незнакомец
 
Сообщения: 5
Зарегистрирован: 26.12.2010 21:16:01

Re: sqlite и dbgrid

Сообщение Padre_Mortius » 22.01.2011 00:42:16

не найден параметр ""e-mail""

Эта ошибка говорит о том, что Query не видит параметра e-mail (значение Query.Params)
Код: Выделить всё
query.Params.ByNameAsAnsiString['e-mail'] := 'a@b.com';
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: sqlite и dbgrid

Сообщение starling13 » 22.01.2011 22:28:01

не найден параметр ""e-mail""

Эта ошибка говорит о том, что Query не видит параметра e-mail (значение Query.Params)


Не совсем так. Обратите внимание на две пары кавычек. Когда я обрамил имя параметра в запросе кавычками:
Код: Выделить всё
... SET "e-mail" = :"e-mail"
,
то возникла эта ошибка.

В любом случае, проблема не столько в самих кавычках, а в различном поведении на различных платформах.
starling13
незнакомец
 
Сообщения: 5
Зарегистрирован: 26.12.2010 21:16:01

Re: sqlite и dbgrid

Сообщение julius » 30.01.2011 21:39:42

Я делал подругому увы я несмог сделать как Вы написали(((( А как сделать с привязкой к этой бдпанели я не знаю(
Дата модуль я создал но вот прикрутить так что бы все работало не смог. База данных у меня в директории единственное что для работы нужно это библиотека скулайт3.длл в систем32. Посмотрите может кто-то подскажет.

Вобщем чтобы не усложнять подскажите как правильно сделать тот пример что приведен выше. Заранее большое спасибо всем кто помогает.
Кто чем редактирует базы?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
julius
незнакомец
 
Сообщения: 4
Зарегистрирован: 09.12.2010 15:04:51

Re: sqlite и dbgrid

Сообщение starling13 » 31.01.2011 23:05:30

Объясните точнее, что не получилось?

Добавлено спустя 2 минуты 37 секунд:
Для SQLIte есть прекрасная утилита администрирования SQLiteman - и для Windows, и для Linux
starling13
незнакомец
 
Сообщения: 5
Зарегистрирован: 26.12.2010 21:16:01

Re: sqlite и dbgrid

Сообщение julius » 01.02.2011 08:58:25

starling13 писал(а):Объясните точнее, что не получилось?

Добавлено спустя 2 минуты 37 секунд:
Для SQLIte есть прекрасная утилита администрирования SQLiteman - и для Windows, и для Linux


А как в этой программе поставить автоинкремент?
Я пробовал к своему примеру прикрутить эту панель но увы неполучилось сегодня еще раз попробую может получится, если получится отпишу.
julius
незнакомец
 
Сообщения: 4
Зарегистрирован: 09.12.2010 15:04:51


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru
cron