|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Код для обмена данными в приложении
Добрый день, помогите набросать код, если не сложно)
Итак приложение с бд Access, в ней таблица zakaz в которой куча полей, которые заполняет пользователь id,surname,info и т.д. их около 15-ти (среди них есть поле name в которое при добавлении заказа автоматически ставится знак # ) хочу чтобы при нажатии на button1 все записи из бд на которых проставлен знак # записывались в какой нибудь файлик например в xml документ, после чего на всех этих записях был проставлен знак ## и похожий код чтобы другой пользователь мог загрузить все эти данные себе в бд собственно своего рода это будет обмен данными между приложениями, бд идентичные по всем полям. Буду благодарен за помощь! |
#2
|
||||
|
||||
Совершенно непонятно, зачем все эти фокусы с символом "#". Ничто ведь не мешает перекидывать данные как есть, без дополнительных символов.
Сделайте логическое (Boolean) поле вместо этой "решётки", с ней лишний гемор. Выделить записи по любому признаку проще всего с помощью свойств Filter/Filtered. Например, если Вы создадите Boolean-поле new_order, то для фильтрации набора данных по состоянию этого поля нужно написать (в Вашем случае в обработчике Button1): Код:
zakaz.Filter := 'new_order = true'; zakaz.Filtered := true; Если фильтровать по символам ("#" или другим) внутри поля, то тут зависит от механизма. Я работал с Access через ADO, и честно говоря уже не помню все нюансы, но кажется мне, что для таких случаев свойство Filter недостаточно функционально (могу и ошибаться). Такого рода фильтрацию я делал, используя компоненты TQuery + динамически формируемый SQL-запрос. Так что, повторюсь, символами в полях вот так выделять записи - плохой тон, лишняя работа. Такие вещи делаются с использование Boolean-полей. Если таблицы полностью идентичны - то вообще нет проблем при переброске данных. Кстати, ещё один метод выделения новых записей - два поля, оба типа DateTime: дата создания записи (записывается в событии AfterInsert) и дата последней правки (в BeforePost). Перекинули данные, потом сортировкой по полям даты/времени легко нашли нужные записи. Последний раз редактировалось Guaho, 31.08.2018 в 19:06. |
#3
|
|||
|
|||
С фильтром все понятно и сделать его не проблема) Приложение стоить на двух разных компьютерах, более того в двух разных городах, вопрос больше не в том как отсортировать данные а как их передавать с одного приложения в другое. Вот в чем был вопрос
|
#4
|
|||
|
|||
Ну, простейший пример - выгрузить нужные записи в файл, передать его каким-либо образом (тут зависит от того, какая связь есть) и потом во второй программе загрузить. В свое время мы делали через xml, но можно и попроще, особенно если это всего одна таблица. Нынче модно поднимать где-нить REST-сервис и работать через него.
|
#5
|
|||
|
|||
Так через XML же проще всего. Есть такой модуль XmlDoc, в нем есть класс TXmlDocument, который работает с XML.
На одном компе выгружаем записи в XML, на другом - читаем из этого XML и записываем в БД. |
#6
|
|||
|
|||
А можно пример кода на выгрузку и загрузку?
в xml |
#7
|
||||
|
||||
В таблице есть поле id? Тогда проще во времянку скидывать его значение по мере поступления новых записей, а на момент передачи в удалёнку считывать по этим номерам нужные из основной таблички в носитель (*.xml или, для уменьшения объёма передаваемого файла, обычный *.txt) и затем чистить tmp для новых заказов. Определитесь с "носителем" - текст кстати можно сжать архиватором, да ещё и с паролем: и меньше весить будет, и защита от "чужих глаз" небольшая будет, когда-то сам так делал
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#8
|
|||
|
|||
Цитата:
|
#9
|
||||
|
||||
Заработал серевер, вот набросок, поскольку используется база акцесс, "передачу" можно осуществить и промежуточной базой (здесь это Носитель.mdb), а как её наполнять и чем - про энто в сборке и бир
Я не понял Вашего вопроса, но всё же Вам на него отвечу! Последний раз редактировалось Alegun, 03.09.2018 в 11:19. |