Перейти к содержанию
  • 0
Fireleo

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

Вопросы

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

 

 

Ошибка возникает при попытке отобразить более одной записи, когда хотя бы одно отображаемое поле имеет тип 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

Было бы здорово, если бы Вы выложили пример.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 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

Кстати, кто тут администратор? Не плохо было изменить название темы, а то в итоге она не по сути вопроса. Как это сделать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 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.

Поделиться сообщением


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

  • Похожий контент

    • От Вадим Смоленский
      Проблема обозначена в заголовке. Подробнее: при дефолтных установках TFDConnection.ResourceOption  (включенных EscapeExpand, MacroCreate, MacroExpand, ParamCreate, ParamExpand) функция Locate возвращает False. При отключении этих параметров Locate падает с сообщением "Unrecognized token {"
      Вынужден вместо Locate использовать Filter, очень сильно проигрывая в скорости. Хотелось бы все-таки понять, в чем тут дело.
       
    • От x11
      При попытке подключиться к базе данных SQLite на эмуляторе с Android  7 получаю исключение:
      Delphi Tokyo + UniDAC 7.
      Эмулятор какой-то неполноценный?
    • От brunnengi
      Здравствуйте.
      Требуется программа на андроид с набором кнопок со следующем функционалом:
      1. Кнопка1 - создать базу в test.sqlite (в том месте где доступ к нему есть только у самого приложения (имею ввиду если это не ROOT телефон, при рут и так всё понятно)
      2. Кнопка2 - создать таблицу в базе test.sqlite с названием "TblTest01" (с разным набором полей на своё усмотрение)
      3. Кнопка3 - создать таблицу в базе test.sqlite с названием "TblTest02" (с разным набором полей на своё усмотрение)
      4. Кнопка4 - Добавить строку в таблицу "TblTest01" (любой набор данных на ваших усмотрение)
      5. Кнопка5 - Удалить строку в таблице "TblTest01" (по любому ключу на ваше усмотрение)
      6. Кнопка6 - Изменить строку в таблице "TblTest01" (по любому ключу и любое значение на ваше усмотрение)
       
      Приложение должно иметь фоновый сервис, который должен получать данные с сервера и добавлять их в базу test.sqlite в таблицу "TblTest02".
      При получение новый данных, сервис должен показать в "шторке" сообщение, по клику на которую открывается само приложение с визуальной частью.
      Т.е. если визуально приложение закрыто, выгружено, не запущено или запущено, фоновый процесс должен сам делать запросы к серверу и добавлять новые данные в базу, если они есть/поступили
      Приложение должно запускаться вместе с системой, после перезагрузки и т.д.
      Использовать только те компоненты что доступны в самой среде из коробки.
      Часть где делается запрос к серверу должен иметь timeout равный 20 секундам.
      Сервис должен грамотно делать запросы к серверу как положено в Андроид приложениях. 
      Серверная часть мне не нужна, можете для теста сами эмулирвать эти процессы.
       
       
      -----
      ЦЕНА: 2500р.
      СРОКИ: Не горит, но в целом где то дней 7 есть
      Перечисляю на QIWI, ЯД, Сбербанк, короче куда скажите.
    • От notricky
      Суть вопроса в заголовке.
      Есть ли какие-то настройки у базы или FireDAC чтобы в английской системе (винда 7) русский текст отображался не вопросами, а русским текстом?
      Настройки у БД UTF-8.
    • От Clio
      Добрый день !
      В приложении я использую базу SQLite (полt, содержащие дату и время тип REAL) . В TFDQuery я описал это поле - тип Float и через LiveBindings подключил к TGrid (Date Column). 
      Но в гриде отображается только год, а не полное время. 
      Подскажите, пожалуйста, как необходимо настроить поле в Query и TGrid, чтобы дата и время отображалась правильно.
    • От Олег Киреев
      Здравствуйте ребята. Моё имя Олег. Я из Минска.
      Подскажите пожалуйста. У меня есть приложение для OS Android представляющее собой базу данных в котором задеплоин файл БД SQLite. Хотелось бы пойти дальше и изучить как обновлять этот файл базы на этом приложении из удалённого сервера простора INTERNET. Может у кого есть готовое решение или ссылка где это подробно описано?
      Благодарю.
      С Уважением. Олег.
    • От notricky
      Собственно как это делают люди?

      Речь, конечно, не про выполнение скрипта "update table set...", а про использование Edit/Post с изменением как в Датасете, так и в БД.

      Какие нужны настройки, в частности у TFDQuery.
      // настройки qr.UpdateOptions = [KeyFields = id][UpdateChangedFields = true] // при этом селект не смотрит напрямую в theTable, но id - это поле theTable qr2.UpdateOptions.UpdateTableName := 'theTable'; qr2.Edit; qr2.FieldByName('Str').Value := Format('%s-%d',[qr2.FieldByName('Str').AsString, Code]); qr2.Post; В такой форме позволяет менять датасет, но в БД данные не скидываются. БД SQLite.
    • От Bio HaZaRD
      Всем привет!
      Пишу проект на основе FireDac (TFDConnection, TFDQuery) + SQLite. На ПК с IDE программа запускается, а на других - нет. На ПК, без IDE, стоят все обновы.
      Помогите разобраться, где проблема или посоветуйте другой компонент, который поддерживает SQLite. Заранее спасибо!
       
      Примечания к файлу:
      Windows-Problemberichtserfassung = Windows Problem Reporting

    • От GoldenEalge
      Имеется бд с полем blob , как из нее загрузить картинку в ListView через LiveBindings ?
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...