Поиск:

Ответ в темуСоздание новой темы Создание опроса
> массив вместо TDBGrid, хочу пару примеров. 
V
    Опции темы
CompWorm
Дата 30.11.2008, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Допеределыватель
***


Профиль
Группа: Участник Клуба
Сообщений: 1689
Регистрация: 6.12.2004
Где: /

Репутация: нет
Всего: 31



использую БД Sqlite3
для доступа - компоненты "ASqlite 2008-06-A"

сейчас на форме имею компоненты:     
TASQLite3DB;
TASQLite3Query;
TDataSource;
TDBGrid;

из них, TDBGrid, я хочу исключить и заменить на строковый двумерный массив, ибо выводить я данные не собираюсь столбиками. идея - в получении данных в массив с последующим анализом и выводом одного подходящего результата. использование TDBGrid в данном контексте неэффективно и медленно.

поэтому прошу Вас, уважаемые знатоки, привести мне 2 наиболее эффективных примера вывода данных по запросу, скажем 'select * from tabel1' в массив и отправки массива данных в базу.

спасибо! 


--------------------
PM MAIL   Вверх
Akella
Дата 30.11.2008, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(CompWorm @  30.11.2008,  13:34 Найти цитируемый пост)
select * from tabel1

для началу нужно знать, сколько полей... чтобы объявить n-мерный массив
PM MAIL   Вверх
CompWorm
Дата 30.11.2008, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Допеределыватель
***


Профиль
Группа: Участник Клуба
Сообщений: 1689
Регистрация: 6.12.2004
Где: /

Репутация: нет
Всего: 31



ну, положим, есть некая таблица в базе, с двумя полями, в которых стоит соответствие имени таблицы и количеству полей в ней.
пусть это таблица indexez и в ней одна запись:
|  tabel1   |   3   |...

что дальше?

Это сообщение отредактировал(а) CompWorm - 30.11.2008, 14:37


--------------------
PM MAIL   Вверх
Akella
Дата 30.11.2008, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



И что тут сложного? В цикле while заносишь данные в массив:

ну вот так, что-то вроде этого
Код

t1.first;
with ti do
  while not eof do begin
    SetLength(arr1, length(arr1)+1);
    arr1[length(arr1)-1] := fieldByName('field').asInteger;
    next;
  end;//while

PM MAIL   Вверх
CompWorm
Дата 30.11.2008, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Допеределыватель
***


Профиль
Группа: Участник Клуба
Сообщений: 1689
Регистрация: 6.12.2004
Где: /

Репутация: нет
Всего: 31



я не гуру баз, поэтому малость хотелось бы по-подробнее...
а что есть t1 ?

я к стати, читал тут одну тему, где писалось, что для 10000 записей метод с циклом неэффективен. 


--------------------
PM MAIL   Вверх
Akella
Дата 30.11.2008, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



я лично не знаю, как по-другому запихать таблицу в массив

Добавлено через 10 секунд
t1 - это имя таблицы

Добавлено через 23 секунды
вернее имя компоненты

Добавлено через 1 минуту и 2 секунды
Цитата(CompWorm @  30.11.2008,  13:34 Найти цитируемый пост)
TASQLite3Query;

у тебя наверное это вместо t1
PM MAIL   Вверх
CompWorm
Дата 30.11.2008, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Допеределыватель
***


Профиль
Группа: Участник Клуба
Сообщений: 1689
Регистрация: 6.12.2004
Где: /

Репутация: нет
Всего: 31



Akella, 
спасибо +. твой метод пошел на ура!  smile 
соответственно, чтобы отправить данные в базу надо тупо юзать цикл с INSERT INTO...

проблема вцелом решена, но если будут более эффективные методы - пишите. буду следить за темой  smile

Добавлено через 7 минут и 2 секунды
Цитата(Akella @  30.11.2008,  14:46 Найти цитируемый пост)
я лично не знаю, как по-другому запихать таблицу в массив

имелось в виду, что-то вроде этого может есть


--------------------
PM MAIL   Вверх
Akella
Дата 30.11.2008, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата

SELECT *;
FROM tablename;
WHERE esli_nado;
INTO ARRAY arrayname


скорее всего ARRAY имеется ввиду в самой базе, а не на стороне клиента, просто некоторые СУБД поддерживают работу с массивами

Добавлено через 1 минуту и 9 секунд
http://bytes.com/groups/postgresql/400172-...lect-into-array
наверное что-то вроде этого
PM MAIL   Вверх
CompWorm
Дата 30.11.2008, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Допеределыватель
***


Профиль
Группа: Участник Клуба
Сообщений: 1689
Регистрация: 6.12.2004
Где: /

Репутация: нет
Всего: 31



Akella, 
наверно  smile  но у меня не получается так конкретно с БД SQLite...

в php такое прокатывает:
Код

<?php
$db = new sqlite_db("db.sqlite");
/* Выполняем запрос с выборкой всех ячеек в ассоциативный массив */
$result_array = $db->array_query("select * from foo", sqlite_assoc);
print_r($result_array);
?> 


может объявить массив как набор стринглистов?
Код

var arr1: array of tstringlist;

и слить в него результат запроса?
к стати, а где хранится результат запроса?!  smile 


--------------------
PM MAIL   Вверх
vovk
Дата 30.11.2008, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 28.2.2008

Репутация: 6
Всего: 6



Или я не всё понял.. или не ясно зачем вообще массив? Не нужно выводить? так и не использовать Dbgrid вообще, А с данными работать в Датасете. У меня была  задача для обработки держать данные из одной таблицы с разными условиями отбора, в одном датасете сделать было нелзя требовалось чтоб данные были одновременно и именно в разных наборах а не в 1 . В общем во время обработки попробывал держать и обрабатывать в массивах. Работает, но доооолго. 

Цитата(CompWorm @  30.11.2008,  20:07 Найти цитируемый пост)
к стати, а где хранится результат запроса?!   

Вот в TDataset и хранится smile про то иговорю зачем массив то?


Это сообщение отредактировал(а) vovk - 30.11.2008, 20:38
PM MAIL   Вверх
CompWorm
Дата 7.12.2008, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Допеределыватель
***


Профиль
Группа: Участник Клуба
Сообщений: 1689
Регистрация: 6.12.2004
Где: /

Репутация: нет
Всего: 31



vovk, 
я нашел TClientDataSet и Tdatasource.
нет контрола ТDataSet, но так, если в проге объявить, рабит.
спасибо. потестирую. smile 


--------------------
PM MAIL   Вверх
Isaev
Дата 7.4.2011, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 8.11.2007
Где: Germany

Репутация: нет
Всего: нет



Цитата(CompWorm @  30.11.2008,  13:34 Найти цитируемый пост)
для доступа - компоненты "ASqlite 2008-06-A"

Подскажите где взять данные компоненты, в сети так и не нашёл

Это сообщение отредактировал(а) Isaev - 7.4.2011, 23:50
PM MAIL ICQ   Вверх
Akella
Дата 8.4.2011, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Почему именно ASqlite?

Добавлено через 1 минуту и 53 секунды
Вот их сайт: http://www.aducom.com/
Поройся, я не нашёл там ссылку на скачивание. Сайт какой-то недоделанный.
PM MAIL   Вверх
Akella
Дата 8.4.2011, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Попробуй зарегистрироваться. Скорее всего, что после регистрации дадут скачать.
PM MAIL   Вверх
Isaev
Дата 8.4.2011, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 8.11.2007
Где: Germany

Репутация: нет
Всего: нет



Цитата(Akella @  8.4.2011,  09:51 Найти цитируемый пост)
Попробуй зарегистрироваться. Скорее всего, что после регистрации дадут скачать.

Да, спасибо

Цитата(Akella @  8.4.2011,  09:24 Найти цитируемый пост)
Почему именно ASqlite?

Потому, что в программе для доступа к DB используется именно она, потому и решил начать с неё.
Хотя база там довольно странная, не встречал такой
файлы с расширениями .vlst, .vdb, .vtv
может к ним можно чем-то подключиться не изобретая колесо?
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0571 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.