Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ] > Код на шару!
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 31.08.2018, 15:34
Ekler1 Ekler1 вне форума
Новичок
 
Регистрация: 12.06.2017
Сообщения: 90
Версия Delphi: RAD Studio XE7
Репутация: 10
По умолчанию Код для обмена данными в приложении

Добрый день, помогите набросать код, если не сложно)
Итак приложение с бд Access, в ней таблица zakaz в которой куча полей, которые заполняет пользователь id,surname,info и т.д. их около 15-ти (среди них есть поле name в которое при добавлении заказа автоматически ставится знак # )

хочу чтобы при нажатии на button1 все записи из бд на которых проставлен знак #
записывались в какой нибудь файлик например в xml документ, после чего на всех этих записях был проставлен знак ##

и похожий код чтобы другой пользователь мог загрузить все эти данные себе в бд

собственно своего рода это будет обмен данными между приложениями, бд идентичные по всем полям. Буду благодарен за помощь!
Ответить с цитированием
  #2  
Старый 31.08.2018, 19:01
Аватар для Guaho
Guaho Guaho вне форума
Начинающий
 
Регистрация: 27.08.2017
Сообщения: 179
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Совершенно непонятно, зачем все эти фокусы с символом "#". Ничто ведь не мешает перекидывать данные как есть, без дополнительных символов.
Сделайте логическое (Boolean) поле вместо этой "решётки", с ней лишний гемор.
Выделить записи по любому признаку проще всего с помощью свойств Filter/Filtered. Например, если Вы создадите Boolean-поле new_order, то для фильтрации набора данных по состоянию этого поля нужно написать (в Вашем случае в обработчике Button1):
Код:
zakaz.Filter := 'new_order = true';
zakaz.Filtered := true;
В этом примере после выполнения фильтрации в наборе данных останутся только те записи, у которых содержимое поля new_order = true ("флажок" установлен).
Если фильтровать по символам ("#" или другим) внутри поля, то тут зависит от механизма. Я работал с Access через ADO, и честно говоря уже не помню все нюансы, но кажется мне, что для таких случаев свойство Filter недостаточно функционально (могу и ошибаться). Такого рода фильтрацию я делал, используя компоненты TQuery + динамически формируемый SQL-запрос.
Так что, повторюсь, символами в полях вот так выделять записи - плохой тон, лишняя работа. Такие вещи делаются с использование Boolean-полей. Если таблицы полностью идентичны - то вообще нет проблем при переброске данных. Кстати, ещё один метод выделения новых записей - два поля, оба типа DateTime: дата создания записи (записывается в событии AfterInsert) и дата последней правки (в BeforePost). Перекинули данные, потом сортировкой по полям даты/времени легко нашли нужные записи.

Последний раз редактировалось Guaho, 31.08.2018 в 19:06.
Ответить с цитированием
  #3  
Старый 01.09.2018, 01:07
Ekler1 Ekler1 вне форума
Новичок
 
Регистрация: 12.06.2017
Сообщения: 90
Версия Delphi: RAD Studio XE7
Репутация: 10
По умолчанию

С фильтром все понятно и сделать его не проблема) Приложение стоить на двух разных компьютерах, более того в двух разных городах, вопрос больше не в том как отсортировать данные а как их передавать с одного приложения в другое. Вот в чем был вопрос
Ответить с цитированием
  #4  
Старый 01.09.2018, 07:47
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,056
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, простейший пример - выгрузить нужные записи в файл, передать его каким-либо образом (тут зависит от того, какая связь есть) и потом во второй программе загрузить. В свое время мы делали через xml, но можно и попроще, особенно если это всего одна таблица. Нынче модно поднимать где-нить REST-сервис и работать через него.
Ответить с цитированием
  #5  
Старый 01.09.2018, 08:16
F.o.x. F.o.x. вне форума
Прохожий
 
Регистрация: 16.06.2018
Сообщения: 14
Версия Delphi: 7, XE3
Репутация: 10
По умолчанию

Так через XML же проще всего. Есть такой модуль XmlDoc, в нем есть класс TXmlDocument, который работает с XML.

На одном компе выгружаем записи в XML, на другом - читаем из этого XML и записываем в БД.
Ответить с цитированием
  #6  
Старый 02.09.2018, 01:31
Ekler1 Ekler1 вне форума
Новичок
 
Регистрация: 12.06.2017
Сообщения: 90
Версия Delphi: RAD Studio XE7
Репутация: 10
По умолчанию

А можно пример кода на выгрузку и загрузку?
в xml
Ответить с цитированием
  #7  
Старый 02.09.2018, 14:25
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

В таблице есть поле id? Тогда проще во времянку скидывать его значение по мере поступления новых записей, а на момент передачи в удалёнку считывать по этим номерам нужные из основной таблички в носитель (*.xml или, для уменьшения объёма передаваемого файла, обычный *.txt) и затем чистить tmp для новых заказов. Определитесь с "носителем" - текст кстати можно сжать архиватором, да ещё и с паролем: и меньше весить будет, и защита от "чужих глаз" небольшая будет, когда-то сам так делал
Ответить с цитированием
  #8  
Старый 02.09.2018, 15:58
Ekler1 Ekler1 вне форума
Новичок
 
Регистрация: 12.06.2017
Сообщения: 90
Версия Delphi: RAD Studio XE7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
В таблице есть поле id? Тогда проще во времянку скидывать его значение по мере поступления новых записей, а на момент передачи в удалёнку считывать по этим номерам нужные из основной таблички в носитель (*.xml или, для уменьшения объёма передаваемого файла, обычный *.txt) и затем чистить tmp для новых заказов. Определитесь с "носителем" - текст кстати можно сжать архиватором, да ещё и с паролем: и меньше весить будет, и защита от "чужих глаз" небольшая будет, когда-то сам так делал
Поле id есть, - ключ, уникальное. за *.txt не думал, если через него можно, то вполне подойдет!
Ответить с цитированием
  #9  
Старый 03.09.2018, 07:12
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Заработал серевер, вот набросок, поскольку используется база акцесс, "передачу" можно осуществить и промежуточной базой (здесь это Носитель.mdb), а как её наполнять и чем - про энто в сборке и бир
Вложения
Тип файла: zip Ekler1.zip (34.4 Кбайт, 1 просмотров)

Последний раз редактировалось Alegun, 03.09.2018 в 11:19.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:37.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter