Перейти к содержанию
Fire Monkey от А до Я
  • 0

Ошибка при попытке отобразить более двух записей в TGrid из БД SQLite


Fireleo

Вопрос

Сможет ли кто-либо помочь с такой проблемой:

 

 

Ошибка возникает при попытке отобразить более одной записи, когда хотя бы одно отображаемое поле имеет тип Integer или boolean.  При компиляции под win32 никаких проблем, но под андроид работает только если запрос возвращает одну строку, если больше то вылетает с ошибкой Exception class Bus error (10). Если в базе данных изменить тип поля на "text", всё в порядке. Не могу понять почему один и тот же компонент так по разному действует под разные платформы.

 

Используется связка TBindCourseDBX и TStringGrid

 

Таблица:

CREATE TABLE Jobs (
 Jobid INTEGER PRIMARY KEY ASC AUTOINCREMENT,
 type TEXT,
 openTime DATETIME,
 closeTime DATETIME,
 description TEXT,
 Close BOOLEAN DEFAULT ( 0 ),
 org INTEGER 
); 
Ссылка на комментарий

Рекомендуемые сообщения

  • 0
query.SQL.Text:='INSERT INTO jobs (type,openTime, closeTime,description,org,Close) values ('+IntToStr(popupbox2.ItemIndex+1)+','+#39+TimeToStr(timeedit1.Time)+#39+','+#39+TimeToStr(timeedit2.Time)+#39+','+#39+edit1.Text+#39+','+inttostr(org)+', 0)';
query.ExecSQL;
query.Close;
jobs.Active:=false;
jobs.Active:=true; 

Ошибка: 

First chance exception . Exception class Bus error (10). Process Project1.apk (9052)

 

Компоненты:

  1. query:TSQLQuery
  2. jobs:TBindSourseDBX

расположены на форме, связаны через jobs.SQLConnection=query

 

Таблица:

CREATE TABLE Jobs (
 Jobid INTEGER PRIMARY KEY ASC AUTOINCREMENT,
 type TEXT,
 openTime DATETIME,
 closeTime DATETIME,
 description TEXT,
 Close BOOLEAN DEFAULT ( 0 ),
 org INTEGER 
); 

Возможно стоит использовать TBindCourseDB в сочетании с TSQLDataSet, вместо TBindCourseDBX? Проверю, напишу если это решит проблему.

Ссылка на комментарий
  • 0

Прошу прощения, сам ошибся и других в заблуждение ввожу.  Проблема в другом. Ошибка возникает при попытке отобразить более одной записи, когда хотя бы одно поле имеет тип Integer или boolean. Пробовал заменить TStringGrid, на просто TGrid, не помогает. При компиляции под win32 никаких проблем, но под андроид работает только если запрос возвращает одну строку, если больше то вылетает с ошибкой Exception class Bus error (10). Если в базе данных изменить тип поля на "text", всё в порядке, но ключ-то может быть только integer. Не могу понять почему один и тот же компонент так по разному действует под разные платформы.

 

jobs.CommandText=

select * from "Jobs"

joy.zip

Ссылка на комментарий
  • 0

А почему бы не использовать TSQLDataSet или TSQLQuery в качестве набора данных? В LiveBinding дизайнере тупо связываете набор данных с гридом. BindSourceDB создается автоматически. Все работает.

 

Кстати, грид в мобильных приложениях, все же моветон. Я, таки, сам убедился в этом. Да и FireDAC лучше чем dbExpress, как по мне.

Ссылка на комментарий
  • 0

А почему бы не использовать TSQLDataSet или TSQLQuery в качестве набора данных? В LiveBinding дизайнере тупо связываете набор данных с гридом. BindSourceDB создается автоматически. Все работает.

В первый раз пробовал вроде не помогло, уже переустановил всё что можно было и устройства другие пробовал. Но сейчас попробовал еще раз и все отлично, если делать как Вы предложили, спасибо.

 

Кстати, грид в мобильных приложениях, все же моветон. Я, таки, сам убедился в этом. Да и FireDAC лучше чем dbExpress, как по мне.

А чем его заменить если надо с табличкой работать? 

Ссылка на комментарий
  • 0

Грид в контексте Андроид это нечто другое.

https://developer.android.com/design/building-blocks/grid-lists.html

Можно вот так вот, плиткой (но тогда код придется писать), а можно просто сделать ListBox.

Я создаю вычисляемое (calculate) поле и вывожу его значения в строках ListBox.

Ссылка на комментарий
Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...