Автор Тема: Lazarus / Как создать простую базу данных и подключить её к форме ?  (Прочитано 21466 раз)

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
дак а в базе что-то есть?
или база пустая
Компонент SQLQuery свойство SQL, добавить запрос 'SELECT * from Table1'.
В базе что-то есть.
Изучаю дальше, спасибо за помощь, чувствую ещё ни раз вернусь в эту тему :)
Сноси Винду, переходи на Линукс ! :)

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
Кто подскажет, как подсчитать количество строк в базе и вывести в Label ?

Делаю так:

*.SQL.Add('SELECT COUNT(*) As asd FROM table_name'); вывести так пытаюсь:
Label1.Caption:=IntToStr(*.FieldByName('asd').AsInteger);но получаю Not found asd.
Как тогда ?
Спасибо.
Сноси Винду, переходи на Линукс ! :)

Оффлайн YYY

  • Мастер
  • ***
  • Сообщений: 5 972
Кто подскажет, как подсчитать количество строк в базе и вывести в Label ?

Делаю так:

*.SQL.Add('SELECT COUNT(*) As asd FROM table_name'); вывести так пытаюсь:
Label1.Caption:=IntToStr(*.FieldByName('asd').AsInteger);но получаю Not found asd.
Как тогда ?
Спасибо.

а если не про ByName, а просто элемент первого столбика - он же у вас один.
и вы проверяете что возвращает SQL.Add ? Запрос выполнен с успехом или нет?

Оффлайн vadval15

  • Давно тут
  • **
  • Сообщений: 187
Не знаю, как в СУБД SQLite, а в MySQL - через RecordCount (свойство SQLQuery1).

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
а если не про ByName, а просто элемент первого столбика - он же у вас один.
и вы проверяете что возвращает SQL.Add ? Запрос выполнен с успехом или нет?
Немного не понял...
Вот так делаю:

  with SQLQuery1 do
  begin
    SQL.Clear;
    SQL.Add('SELECT COUNT(*) As asd FROM table_name');
    Open;   
  end;
  Label3.Caption:=IntToStr(SQLQuery1.FieldByName('asd').AsInteger);

Как проверить ?
Этот код в Delphi с ADOQuery работает.

Не знаю, как в СУБД SQLite, а в MySQL - через RecordCount (свойство SQLQuery1).
Мне как бы сложнее нужно запрос, с WHERE и т.д., но решил с простого начать, т.к. и он не получается...
Сноси Винду, переходи на Линукс ! :)

Оффлайн YYY

  • Мастер
  • ***
  • Сообщений: 5 972
  with SQLQuery1 do
  begin
    SQL.Clear;
    SQL.Add('SELECT COUNT(*) As asd FROM table_name');
    Open;   
  end;
  Label3.Caption:=IntToStr(SQLQuery1.FieldByName('asd').AsInteger);

Как проверить ?
Этот код в Delphi с ADOQuery работает.

так я не прав
« Последнее редактирование: 25.10.2014 11:45:48 от YYY »

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
что в result ?
Вот так что ли:
with SQLQuery1 do
  begin
    SQL.Clear;
    SQL.Add('SELECT COUNT(*) As asd FROM table_name');
    Open;
    Label3.Caption:=BoolToStr(SQLConnector1.Connected);
  end;     
Выводит -1.
Сноси Винду, переходи на Линукс ! :)

Оффлайн YYY

  • Мастер
  • ***
  • Сообщений: 5 972
Судя по http://www.freepascal.org/docs-html/fcl/db/tdataset.open.html
надо ловить
exception
типа

  try
    SQLQuery1.SQL.Clear;
    SQLQuery1.sql.add('SELECT * ...;');
    SQLQuery1.Open;
  except
    ShowMessage(' Ошибка при выполнении SQL запроса.');
  exit;
  end;
« Последнее редактирование: 25.10.2014 11:55:23 от YYY »

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
надо ловить
Ну как бы другие запросы работают... типа:
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add('SELECT DISTINCT fio FROM table1');
SQLQuery1.Open;
SQLQuery1.First; 
while (not SQLQuery1.Eof) do
begin
  ComboBox1.Items.Add(SQLQuery1.FieldValues['fio']);
  SQLQuery1.Next;
end;

Сообщение не вылазит, стало быть, запрос как бы выполняется.
Сноси Винду, переходи на Линукс ! :)

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
В общем всё заработало, пришлось несколько изменить кое-что...
У меня у элемента SQLQuery1 были добавлены Fields из моей базы данных (как связи что ли получается), когда их удалил -- всё начало работать. Заметил я когда, попытался запустить проект ни с
'SELECT * FROM table1'
, а
'SELECT fio,number FROM table1'
То есть полей сделал меньше, тут SQLQuery начал ругаться, мол ни все поля присутствуют (что-то такое).
Кто может объяснить тогда: как правильно организовать работу ? У меня на главной форме нет DBGrid, он на другой форме. Но на главной форме я запросами заполняю Items-ы  у ComboBox-ов, и на других формах мне нужно выполнять запросы (при нажатии на кнопки например). Сколько и куда  мне нужно расположить SQLQuery и на каких формах ? На каждую по одному бросить быть может ?
Заранее спасибо.
Сноси Винду, переходи на Линукс ! :)

Оффлайн YYY

  • Мастер
  • ***
  • Сообщений: 5 972
А вы заведите их под каждую задачу отдельный и осмысленное имя дайте
Какие-то для запросов, какие-то для вывода в грид и заполнения элементов и т.д.

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
А вы заведите их под каждую задачу отдельный и осмысленное имя дайте
Какие-то для запросов, какие-то для вывода в грид и заполнения элементов и т.д.
Вроде разобрался...
Сноси Винду, переходи на Линукс ! :)

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
Всем привет! Кто может подсказать по созданию базы данных в sqlitestudio ? Проект в Lazarus могу приложить.
Сноси Винду, переходи на Линукс ! :)

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
Ну чё-то вообще ни одной записи добавить не получается, это почему так ? Делаю все через Navigator, в таблице данные отображаются, но в базу не попадают! sqlitestudio вносит данные в базу без проблем.
Сноси Винду, переходи на Линукс ! :)

Оффлайн neobht

  • Завсегдатай
  • *
  • Сообщений: 390
Может пойти от задачи?

Или цель - научиться делать БД для какой-либо СУБД на Lazarus?