Как сделать открытие файла из dbgrid

0

Как сделать открытие файла из dbgrid

как сделать открытие файла из dbgrid

ВАЖНО! Для того, что бы сохранить статью в закладки, нажмите: CTRL + D

Задать вопрос ВРАЧУ, и получить БЕСПЛАТНЫЙ ОТВЕТ, Вы можете заполнив на НАШЕМ САЙТЕ специальную форму, по этой ссылке >>>

Народ здарова, столкнулся с такой проблемой.
Мне нужно всё что есть в DBGrid сохранить в файл и потом опять загрузить в ту же таблицу.
В каком формате будет хранится таблица мне откровенно пофиг, главное чтобы все данные потом встали на место.
(использую Table, DBGrid и DataSourse)

Обрадую, в DBGrid ничего нет.

Anatoly Podgoretsky © (01.08.05 19:32) [1]

Вывод данных из DBGrid как правило называют отчётом А повторение выборки данных в DBgrid фильтрацией.

DBgrid всего лишь инструмент для работы с данными, сами данные в Вашем случае находятся в Table


> Глюкоман (02.08.05 00:10) [4]

и как это замутить, я не верю что никак

>Мне нужно всё что есть в DBGrid сохранить в файл и потом опять загрузить в ту же таблицу.

Нафига, если данные и тах уже хранятся в таблице?
Цель предполагаемой операции удаления гланд через ж..пу?

>tesseract © (01.08.05 22:08) [3]
>Вывод данных из DBGrid как правило называют отчётом А повторение выборки данных в DBgrid фильтрацией.

Сам придумал или «умные» люди подсказали ?

По сабжу: используй клиентский датасет (TClientDataSet)


> Мне нужно всё что есть в DBGrid сохранить в файл

А это уже и так все в файле, в каком-то *.db


> evvcom © (02.08.05 09:32) [8]

ну это допустим я знаю, а нельзя сохранить в другой файл?
Н/р: как делается в мемо
Сохранение — memo1.lines.savetofile(«temp.txt»);
Загрузка — memo1.lines.loadfromfile(«temp.txt»);
Мне нужно то же, только с базами данных

В принципе можно. Но что делать с запросами, объединяющими несколько таблиц, если имя таблицы неизвестно, а сама она возникнет только в ходе работы программы?
Или у тебя нет никакой БазыДанных, а только ОДНА таблица? Тода может не стоит заморачиваться с этими базами данных, а работать с текстовым файлом, загрузку и сохранение которого ты уже освоил

Надо выяснить:
1. Раз в гриде отображаются записи таблицы БД, то сама информация УЖЕ должна сохраняться в этой таблице и никаких промежуточных «сэйвов» делать не надо.
2. Если требуется обеспечить «локальность» данных БД (например, при удаленности БД и нестабильном соединении) для увеличения скорости или временной независимости, то прямой путь к TClientDataSet, обеспечивающий и «подкачку» данных с «сервера», и сохранение-восстановление текущего клиентского состояния таблицы в локальный файл.

Весь ? в том, нафига такие вые..ны. -)


> (использую Table, DBGrid и DataSourse)


> Но что делать с запросами, объединяющими несколько таблиц,
> если имя таблицы неизвестно, а сама она возникнет только
> в ходе работы программы?
.


> msguns © (02.08.05 12:19) [11]
— можно так, но автор не потянет

Имхо. Скопируй файл таблицы и не мучайся. Только зачем это надо ?

Куча ответов, но ни одного решения

2ArchValentin ©
Если надо просто «чтоб работало» кинь на форму невидимый StringGrid с поддержкой сохранения в файл (к примеру, SaveToCSV, LoadFromCSV). Потом просто заполняй этот Грид данными выборки и сохраняй. С загрузкой данных обратно в таблицу (базу) правда тормознуто будет — надо будет на каждую запись Инсерт делать.

Читать еще:  Полезные и вредные е добавки


> Amido (02.08.05 14:16) [14]
CSV не все кушает

Есть компоненты типа AdvStringGrid, он позволяет загружать и сохранять файлы в формате Excel и Word

———————————————
На закладке DataAccess есть модуль DateBase
в свойствах DriverName проставь файлы Excel,
а потом добавь компоненты для связи с
DBGrid
DataSource, Table, DBNavigator.
Проставь взаимосвязь между ними в ObjectInspector.
Так пробовал?
———————————————

DBGrid и открытие папки — Delphi БД
Доброго времени суток) Может, конечно, спрашиваю глупость, но тем не менее: можно ли сделать так чтобы при выборе определенной строки в.

Открытие таблицы в DBGrid кнопкой — Delphi БД
Вопрос состоит в следующем! Есть комбобокс в нем разные номера групп (272 323 453 345) так же есть таблицы которые относятся к этим.

Открытие Word документа в DbGrid — Delphi БД
Доброго времени суток) Можно ли сделать так чтобы при выборе определенной строки в DBGrid открывался определенный вордовский документ в.

Открытие формы через поле в DBGrid — Delphi БД
Есть DBGrid с полем “Название цветка”. Как сделать, чтобы при выборе строки с конкретным названием цветка, открывалась новая форма, с.

OnDblClick в DBGrid и открытие новой формы — Delphi БД
Здравствуйте! Имеется форма на которой есть DBGrid с данными. Нужно чтобы при двойном щелчке открывалась другая форма с данными другой.

Открытие окна в зависимости от выбранного DBGrid. — Delphi БД
Всем привет. Не подскажите как можно реализовать следующее: На форме лежит два DBGrid’a как можно сделать, чтобы при нажатии на кнопку.

Откуда:
Сообщений: 65

Откуда: Не помню
Сообщений: 10013

тебя просто ответ «Да» устроит?

Откуда:
Сообщений: 65

Откуда: Тернопіль, Україна
Сообщений: 2098

Откуда: Не помню
Сообщений: 10013

есть библиотека компонентов EhLib. Версия 3.6 — доступна для скачивания и бесплатна.

Так вот, в наборе компонентов есть грид, который умеет красиво данные экспортировать. В разных форматах.

Откуда:
Сообщений: 65

Откуда: Не помню
Сообщений: 10013

Ну так делай — в чем проблема?

Все данные лежат в датасете, к которому грид «прицеплен».
Все столбцы «привязаны» к своим полям данных. Размеры столбцов доступны, порядок следования — доступен. Даже шрифт и его параметры — доступны.

Брось на форму кнопку, в ней напиши код, который в цикле:
— переберет все записи датасета,
— для каждой записи выберет значения полей ячеек, сформирует выходную строку, выведет строку в текстовый файл.

Откуда:
Сообщений: 65

я как с экспортом в файл не встречался, вот написал код

var
i : integer;
TxtFile : TextFile;
str :String;
begin

AssignFile(TxtFile, С:temp1.txt’);
Rewrite(TxtFile);
for i:=1 to sDBGrid1.Columns.Count-1 do
begin
str:=sDBGrid1.DataSource.DataSet.Fields[0].AsString;
Writeln(TxtFile, str);
end;
closefile(TxtFile);
end;
но что-то он не работает, то ли я лох, то ли лыжи не едут)))

Откуда: Не помню
Сообщений: 10013

Лучше конечно сделать выбор разделителя ячеек (предлагать в диалоговом окне символы — ; : , . Tab ) для совместимости и с другими старыми программами.

Но пока я до этого момента ещё не дошёл. а думаю как мне реализовать полноценный экспорт и импорт базы (в сущьности *.DBF) в *.TXT файл и как не используяя дополнительных компонентов и примочек — так сказать по простому перегонять данные из DBF в TXT и обратно.

Читать еще:  Л карнитин польза

Да есть правда ещё один точнее два ньюанса первое я использую для прямого доступа к базе компонент Halcyon6 и попутно хочу прицепить с функциям экспорта — импорта Guage (аналог ProgreccBara, тока получьше будет. ).

-юсртыхэю 28.10.05, 06:22

И как прочесть и как записать.
Всё хоже вокрег да около.

DBGrid

Компонент Delphi DBGrid – это визуальный компонент среды Delphi, предназначен для визуализации наборов данных. Этот компонент находиться на странице компонентов DataControls палитры компонентов. Класс TDBCustomGrid и класс TCustomGrid – это родительские классы компонента DBGrid. Компонент делиться на столбцы (поля ввода данных) и строки (записи).

Свойства DBGrid

  • dgEditing — Делает возможность править данные прямо в таблице. Этот значение игнорируется, при включенном флаге dgRowSelect;
  • dgAlwaysShowEditor — Таблица будет находиться в режиме редактирования. Если False то пользователь должен будет активировать сам редактирование щелчком мышы по полю или нажимать F2, Enter;
  • dgTitles — Делает видными заголовки столбцов;
  • dgIndicator — Добавляет еще одну колонку, в которой будут выводиться индикатор выбранной записи;
  • dgColumnResize — Дает возможность изменить размеры столбцов пользователю;
  • dgColLines — Столбцы будут разделены линиями;
  • dgRowLines — строки будут разделены линиями;
  • dgTabs — Дает возможность навигации по ячейкам при помощи клавиш Tab и Shift+Tab;
  • dgRowSelect — Записи будут выделяться целиком;
  • dgAlwaysShowSelection — Выбираемая ячейка будет выделяться цветом, даже если фокус ввода находится не на таблице;
  • dgConfirmDelete – Позволяет выводить предупреждение, если пользователь будет удалять запись в таблице;
  • dgCancelOnExit — Предотвращает запись пустых ячеек;
  • dgMultiSelect – Дает возможность выбора нескольких записей при удержании Ctr).

Работа со столбцами

Над значениями столбцов можно проводить различные операции: скрывать или показывать поля, менять положение, добавлять новые столбцы. Редактор столбцов предназначен для изменения набора полей. Вызывается редактор двойным щелчком мыши(рис 1). Он имеет четыре свойства (Add New, Delete Selected, Add All Fields, Restore Defaults). Соответственно: добавить новый столбец, удалить выделенный, добавить все столбцы из полей ввода данных, восстановление значения для выделенного столбца (по умолчанию). Свойства для каждого из выбранных столбцов появляются в Object Inspector. Со столбцами можно проводить такие операции:

  • редактирование;
  • удаление;
  • смена местами двух столбцов;
  • изменять заголовок столбцов (свойство Title).

Свойства Colums

  • cbsAuto — кнопка появляется, если связанное с ним поле является полем синхронного просмотра;
  • cbsEllipsis —кнопка редактирования ячейки появляется всегда;
  • cbsNone — Кнопа при редактировании ячеек не появляется

При необходимости создания дополнительного пустого столбца в редакторе столбцов таблицы DBGrid необходимо воспользоваться свойством FieldName (поле базы данных оставить пустым). В пустые столбцы можно перемещать уже обработанные данные из других столбцов.

Работа со строками

Как при работе со столбцами, так и при работе со строками можно изменять цвет ячеек – это очень удобно при работе с большим количеством данных, ведь всегда можно выделить отдельные столбцы или строки различными цветами для обозначения той или иной категории. Свойство DefaultDrawing – значение, которое влияет на способ прорисовки данных в компоненте DBGrid (по умолчанию свойство равно True, в этом случае данные прорисовываются автоматически). Если значение DefaultDrawing равно False, прорисовку нужно делать самостоятельно при помощи OnDrawColumnCell. Другой вариант, пользователь прописал алгоритм прорисовки, но значение свойства остается равно True, тогда DBGrid заполнится сначала автоматически, а лишь потом будет выполнен алгоритм пользователя (то есть прорисовка выполняется дважды, это сказывается на быстродействии программы, но теперь пользователю не придется заполнять все пустые ячейки вручную).

Читать еще:  Полезные мелочи для дома

Если до компонента DBGrid вам приходилось работать с компонентом Delphi StringGrid, то вам уже будет намного легче, ведь принцип работы этих двух компонент очень похож, только к дополнению свойств StringGrid, DBGrid имеет свои собственные свойства. Ячейки – это основные структурные единицы таблицы. Свойство State – состояние таблицы (gdSelected – выделена, gdSelected – имеет фокус ввода, gdFixed – ячейка-заглавие столбца).

Delphi. FireDac. Как быстро создать 1 000 000 записей в БД MySQL и отобразить их в DBGrid?

Этот пост об удобной возможности FireDAC писать в базу сразу очень много записей. В документации указано, что эта техника позволит сократить количество соединений между базой и нашим приложением. Для начала в БД MySQL создадим таблицу с одним автоинкрементным полем-счетчиком и 5 одинаковыми полями. Для этого я воспользовался услугами программы Workbench. Ниже я привожу код создания БД, его можно просто скопировать и вставить в консоль MySQL.

Создание БД и таблицы

Итак, наша БД называется array_db, а таблица в ней называется firsttable.

Создание клиента Delphi

Создадим новый VCL проект и добавим следующие компоненты

Для FDConnection1 создадим отдельное определение Connection Definition под именем MySQL_array_db и подключим его, настроим следующим образом. Это можно сделать разными способами, я делал через View | DataExplorer | FireDac | MySQL Server –> правой кнопкой мыши Add Connection и далее настроил параметры

В FDQuery1 в свойстве SQL я написал запрос select*from firsttable

Генерация 1000 000 записей

Итак, сейчас мы перейдем непосредственно к генерации 1000 000 записей. Саму генерацию записей я предлагаю убрать в отдельный поток, поскольку миллион записей не появятся в базе одномоментно, а главное приложение может понадобиться.

Создание потока…

Далее ставим курсор на procedure Execute; и жмем Ctrl+Shift+C и получаем генерацию шаблона процедуры, в которую добавляем следующий код

Таймер

Таймер нужен для того, чтобы оценить время операции, поскольку мы будем работать с большими массивами – ограничимся секундами

Кнопка generateArray

Кнопка clearArray

Результат

Улучшаем результат

Результат для 1000 000 добавленных записей не плохой, но и его можно улучшить, поиграв с параметром Resource Options.ArrayDMLSize, который по умолчанию равен 2147483647 или 2 GB, но максимальное ограничение параметра max_allowed_packet по базе MySQL составляет 1GB, поэтому мы можем экспериментировать со снижением этого параметра. Выставим его, например в значение 10485760 или 10 Мб и посмотрим как это повлияет на время.

Поставим значение Resource Options.ArrayDMLSize в 104857600 или 100 Мб и получим результат

Настраивая различные параметры со стороны сервера БД и клиента можно уменьшить время ожидания операций. Но это процесс экспериментов.

Выводы

На мой взгляд, для поставленной задачи результат очень хороший. По сути мы записали 1 миллион записей всего за 22 секунды, думаю, результат можно ещё улучшать за счет различных настроек, но это логично делать на рабочей задаче, а не на учебной.Представленная реализация далеко не единственная, но, на мой взгляд довольно простая и эффективная. В документации описываются ещё примеры.

Источники:

http://kaketodelaetsya.ru/kak-sdelat-otkrytie-fajla-iz-dbgrid
http://www.h-delphi.ru/dbgrid/
http://digital-flame.ru/2016/01/19/delphi-firedac-kak-sozdat-1-000-000-zapisey-i-otobrazit-ih-v-dbgrid/

голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии