Консультація онлайн #52133 таке питання створюю тип type tinfo record fam string; name string; otch

Таке питання. Створюю тип. : type Tinfo = record Fam : string[15]; Name: string[15]; Otch: string[15]; Date: String[10]; City: string[15]; Street: String[20]; Dom: string[5]; kv: string[5]; tel_home: string[10]; tel_mob: string[10]; passport: string[10]; first_travm: string[10]; type_kol: string[20]; child: TListView; Photo: TDBImage; end;

Після цього працюю із типізованим файлом. В додатку. Фото груди з DbImage. Начебто код виконується. але розмір вихідного файлу все одно менше, ніж навіть сама картинка. Пробую витягувати цю картинку так: procedure TForm1.Button1Click(Sender: TObject); Var F: file of TInfo; t:TInfo; begin AssignFile(f,'C:\info.bti'); Reset(F); try while не Eof(F) do begin Read (F, t);

image1.Picture:=t.Photo.Picture; end; finally closefile(f); end;

Видає помилку, ніби звернення до неіснуючої пам'яті. Можу припустити, що картинки там не завантажилося. Причому вся текстова інформація читається від туди. Ось що є з цієї проблеми. Якщо, що, може хтось запропонує інший метод експорту-імпорту інформації з БД для ручної синхронізації.

Стан: Консультація закрита

0

Надсилати повідомлення модераторам можуть тільки учасники порталу. УВІЙТИ НА ПОРТАЛ » реєстрація »

Так, справді. DB, просто по ходу використав. Тепер зрозумів. Дійсно, у мене часом спостерігався такий ефект, що за певних умов з'являлася різна картинка. А які будуть пропозиції щодо зберігання зображення разом із рештою даних?

Вадим Ісаєв ака sir Henry Майстер-Експерт

ID:425

А навіщо взагалі використовувати типізований файл? Чим погана таблиця БД?

===== Я тільки в одному глибоко переконаний - не треба мати переконань! :)

Пояснюю. Необхідний експорт-імпорт інформації між таблицями, причому на різних машинах, між якими немає ніякого протокольного зв'язку. Лише локальний експорт. Інфа в полях мало того текстова + графіка. Пробую із потоками робити. Може просто зберігати зображення, а потім через потоки, дописувати всю інформацію текстову.

===== Я тільки в одному глибоко переконаний - не треба мати переконань! :)

Втім приймаю будь-які варіанти. Але, мабуть, моя ідея з типізованими файлами обламалася.

===== Я тільки в одному глибоко переконаний - не треба мати переконань! :)

Вадим Ісаєв ака sir Henry Майстер-Експерт

ID:425

===== Я тільки в одному глибоко переконаний - не треба мати переконань! :)

Те має бути дві таблиці, одна робоча, інша для синхронізації, потім виходить другу потрібно буде ручками перенести на той комп'ютер і звірити всі записи, і якщо чогось ні, то додати? Хм.. можливо просто.. але чи не громіздко?

===== Я тільки в одному глибоко переконаний - не треба мати переконань! :)

Вадим Ісаєв ака sir Henry Майстер-Експерт

ID:425

Без знання конкретної ситуації щось тут сказати важко. Це просто як одна із пропозицій. Адже інших все одно немає. :)

===== Я тільки в одному глибоко переконаний - не треба мати переконань! :)

Ну значить є дві таблиці з інформацією. Інфа переважно текстова, але одне поле з фотками. Ось і необхідно встановити синхронізацію між віддаленими комп'ютерами. На одному додав полів 20, злив у файл, на другому відкрив та інфа додалася.

===== Я тільки в одному глибоко переконаний - не треба мати переконань! :)

Вадим Ісаєв ака sirHenry Майстер-Експерт

ID:425

Додавати відсутні записи з переносної таблиці (за умови, що структури таблиць однакові) найпростіше за допомогою запиту: INSERT INTO Таблиця_Призначення SELECT * FROM Приноситься_Таблиця Тим самим додаються всі записи скопом. Якщо додаються якісь дані за день, наприклад, тоді в переносну таблицю модифіковані записи можна додавати, наприклад, виходячи зі вчорашньої дати: INSERT INTO Принесена_Таблиця SELECT * FROM Базова_Таблиця WHERE

===== Я тільки в одному глибоко переконаний - не треба мати переконань! :)

INSERT INTO Таблиця_Призначення SELECT * FROM Принесена_Таблиця Отже, цим запитом можна просто з однієї таблиці додати до іншої таблиці дані, яких не існує там?

===== Я тільки в одному глибоко переконаний - не треба мати переконань! :)

Вадим Ісаєв ака sir Henry Майстер-Експерт

ID:425

Ні не правильно. У перекладі українською це звучить так: ДОДАТИ В ТАБЛИЦЮ Таблиця_призначення ВСІ ДАНІ З ТАБЛИЦЯ. А ось умови відбірки неіснуючих записів Ви задаєте під час вибірки з вихідної (основної) таблиці. Тому стало можливим скопіювати в Таблицу_призначення просто всі записи, не борючись на їхній відбір.

===== Я тільки в одному глибоко переконаний - не треба мати переконань! :)

Так зрозуміло. Ну а якщо записи будуть однаковими, то вони просто перепишуться і дві таблиці стане ідентичними один одному.

===== Я тільки в одному глибоко переконаний - не треба мати переконань! :)

Вадим Ісаєв ака sir Henry Майстер-Експерт

ID:425

Буде подвійний набір записів. Але якщо встановлено унікальний індекс по якомусь полю, тодругий, подібний запис записати вже не вдасться - індекс завадить. Треба ретельно опрацювати питання, якою ознакою керуватися для перенесення записів до іншої таблиці.

===== Я тільки в одному глибоко переконаний - не треба мати переконань! :)

Так. Встановлено унікальний ключ першого поля в одній таблиці. На другий немає, там у першому полі може доводиться однакові числа, т.к. декілька полів можуть мати зв'язок з одним із першої таблиці. А як зробити наприклад, так, якщо такого запису немає в таблиці, то додати, і присвоїти унікальному значенню, число на 1 більше, ніж останній запис там. Може потрібно тригери використовувати, в них я трохи не сильний. Пишу на InterBase.

===== Я тільки в одному глибоко переконаний - не треба мати переконань! :)

Вадим Ісаєв ака sir Henry Майстер-Експерт

ID:425

Якщо на InterBase, то є така штука, називається генератор. Добре підходить для створення будь-якого значення. Створюється генератор так: CREATE GENERATOR generatorname; де generatorname - це назва генератора. Для того, щоб встановити початкове значення пишемо: SET GENERATOR generatorname значення; Можна вибрати максимальне число з першого поля та зробити його початковим значенням. Застосовується генератор так: INSERT INTO Table (Id, інші поля) VALUES (GEN_ID(generatorname, 1), інші значення); Тут ми збільшуємо значення на 1, але можна вказувати і будь-яке інше число більше за нуль. Якщо початкове значення генератора було, скажімо 55, то таблицю Table, у полі Id, заноситься значення 56. У генераторі воно зберігається і таким чином щоразу видаватиметься нове число. Якщо використовувати його у тригері, то треба створити тригер для діїпередвставкою запису: CREATE TRIGGER TBI_Table FOR TableACTIVE BEFORE INSERT POSITION 0 AS BEGIN NEW.Id = GEN_ID(generatorname, 1); END Однак використання тригерів доцільно лише тоді, коли вся логіка роботи з БД у Вас знаходиться у самій БД. В іншому випадку, якщо у Вас одні дії знаходяться в БД, інші в самому додатку, легко заплутатися. Наприклад, Ви забудете, що у Вас вже є тригер на вставку і вставлятимете унікальне значення поля в клієнті, тоді у Вас може порушитися послідовність нумерації, т.к. у тригері поле збільшиться на 1 і плюс до цього додаток збільшить його ще на 1.

===== Я тільки в одному глибоко переконаний - не треба мати переконань! :)

Можливість залишати повідомлення в міні-форумах консультацій доступна тільки після входу в систему.