Объясните мне как написать

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Freeman8901
Сообщения: 18
Зарегистрирован: 11 апр 2005, 14:46
Откуда: Драхелас

Народ прошу помощи. Я уже все мозги разбил на части все извилины заплел. Не могу понять как эту прогу написать.


Это моя первая прога на Делфи (раньше я писал на досовских языках)

Моё начальство дало задание написать программулину, которая должна показывать сведения предоставленные ИМНС.

Помощь мне нужна в следующем объясните (желательно с примерами) как можно из одной базы (база в формате Access) перенести данные в другую базу такуюже с проверкой на дублирование записей во второй базе (в случае если запись в таблице существует, то эту запись надо обновить, если такой записи нет, то нужно создать новую) и где это в делфи пишется. Или как можно занести данные в базу (база в формате Access) из XML-документа который в себе содержит хронику изменения/внесения записей и как его можно правильно обработать чтобы данные можно было перенести в базус проверкой на дублирование записей во второй базе (в случае если запись в таблице существует, то эту запись надо обновить, если такой записи нет, то нужно создать новую) и где это в делфи пишется. (в формате XML-документа ИМНС передает нам сведения)

Заранее спасибо.
RoKon
Сообщения: 82
Зарегистрирован: 27 мар 2005, 12:24
Откуда: Saransk City
Контактная информация:

Как знакомо, мне тоже чуть было не пришлось писать модуль конвертации из этого самого ИМНС-овского файла типа XML в Paradox, но я вовремя смотался с той фирмочки, и задача осталась приемнику :-).
Но гемороя всеже я успел немного словить. Вообще то в налоговой все храниться на MS SQL Server, просто прога иха делает экспорт в xml.
Впринципе все должно быть просто. Цепляешь файл xml как какую-нить базу, через АДО прокатит может даже, а затем копируешь все в новую за исключением уже существующих...
The trurh is out there...
Freeman8901
Сообщения: 18
Зарегистрирован: 11 апр 2005, 14:46
Откуда: Драхелас

Мне нужно из этой выгрузки убрать хронику и оставить последние записи, а так все бы ничего. Помогите пожалуйста очень надо.
RoKon
Сообщения: 82
Зарегистрирован: 27 мар 2005, 12:24
Откуда: Saransk City
Контактная информация:

а отфильтровать по дате не получается? Скажи сейчас на каком этапе? В одном приложении доступ сразу к двум базам организовал? SQL используешь? АДО? ...
The trurh is out there...
Freeman8901
Сообщения: 18
Зарегистрирован: 11 апр 2005, 14:46
Откуда: Драхелас

RoKon, По дате там отфильтровать ни как не получится с датами там белеберда какая-то. Я как раз вот наэтом этапе и споткнулся и ни как его пройти не могу. То что в этой выгрузке находиться хроника я понял тогда когда открыл таблицы через DBGrid с подстановкой данных из связных таблиц. Пробовал удалять 2-ю строку из XML файла в которой есть ссылка на файл DTD делфя вроде начала его открывать без ошибок, но у меня не получилось или мозгов не хватило от туда эти данные достать таже просто их вывести на экран я уже по этому вопросу кучу литературы прочитал, но там все в общих чертах описывается и без примеров. Если бы это можно было написать в клипере, то я бы эту программу написал бы за 2 дня тама переключение между таблицами простое да и SET FILTER TO замечательно работает, но не буду же я эту прогу на досовском языке писать народ не так поймет вот и приходиться его на делфи писать. А как что пишется в дельфях понять не могу ни как, а с логикой у еня вроде нормально я уже всевозможные логические операции расписал а вот теперь проблема все это делфи объяснить
RoKon
Сообщения: 82
Зарегистрирован: 27 мар 2005, 12:24
Откуда: Saransk City
Контактная информация:

С датами белеберда, ок. Ну а какой-нить поле есть уникальное, по которому можно однозначно определить наличие записи в той или иной таблице?
The trurh is out there...
Freeman8901
Сообщения: 18
Зарегистрирован: 11 апр 2005, 14:46
Откуда: Драхелас

RoKon, естественно есть. Но мне то нужна последняя запись
RoKon
Сообщения: 82
Зарегистрирован: 27 мар 2005, 12:24
Откуда: Saransk City
Контактная информация:

А по значениям этого уникального поля нельзя определить записи которые уже экспортировались, а которые еще нет? Т.е. я к чему веду, полюбому надо по каким-то критериям определять новые записи и уже существующиеся.
The trurh is out there...
Freeman8901
Сообщения: 18
Зарегистрирован: 11 апр 2005, 14:46
Откуда: Драхелас

Подсказали мне написать следующее:

unit2.DataModule2.ADOQuery2.SQL.Add('select IdUL, DtStart, DtEnd, OsnRegNum, IdStatus, IdRegOrg, IdStart, IdEnd, IdReg, Prz, DtZap from ul');
unit2.DataModule2.ADOQuery2.open;
while not unit2.DataModule2.ADOQuery2.Eof do
begin
unit2.DataModule2.ADOQuery1.close;
unit2.DataModule2.ADOQuery1.sql.clear;
unit2.DataModule2.ADOQuery1.sql.add('select IdUL from ul where IdUL='+unit2.DataModule2.ADOQuery2.fields.fields[0].asstring);
unit2.DataModule2.ADOQuery1.open;
if unit2.DataModule2.ADOQuery1.recordcount>0 then
begin
unit2.DataModule2.ADOCommand1.commandtext:='update ul set DtStart='+unit2.DataModule2.ADOQuery2.fields.fields[1].asstring+', DtEnd='+unit2.DataModule2.ADOQuery2.fields.fields[2].asstring+', OsnRegNum='+unit2.DataModule2.ADOQuery2.fields.fields[3].asstring+', IdStatus='+unit2.DataModule2.ADOQuery2.fields.fields[4].asstring+', IdRegOrg='+unit2.DataModule2.ADOQuery2.fields.fields[5].asstring+', IdStart='+unit2.DataModule2.ADOQuery2.fields.fields[6].asstring+', IdEnd='+unit2.DataModule2.ADOQuery2.fields.fields[7].asstring+', IdReg='+unit2.DataModule2.ADOQuery2.fields.fields[8].asstring+', Prz='+unit2.DataModule2.ADOQuery2.fields.fields[9].asstring+', DtZap='+unit2.DataModule2.ADOQuery2.fields.fields[10].asstring+' where IdUL='+unit2.DataModule2.ADOQuery2.fields.fields[0].asstring;
unit2.DataModule2.ADOCommand1.execute;
end
else
begin
unit2.DataModule2.ADOCommand1.commandtext:='insert into ul values('+unit2.DataModule2.ADOQuery2.fields.fields[0].asstring+', '+unit2.DataModule2.ADOQuery2.fields.fields[1].asstring+', '+unit2.DataModule2.ADOQuery2.fields.fields[2].AsString+', '+unit2.DataModule2.ADOQuery2.fields.fields[3].asstring+', '+unit2.DataModule2.ADOQuery2.fields.fields[4].asstring+', '+unit2.DataModule2.ADOQuery2.fields.fields[5].asstring+', '+unit2.DataModule2.ADOQuery2.fields.fields[6].asstring+', '+unit2.DataModule2.ADOQuery2.fields.fields[7].asstring+', '+unit2.DataModule2.ADOQuery2.fields.fields[8].asstring+', '+unit2.DataModule2.ADOQuery2.fields.fields[9].asstring+', '+unit2.DataModule2.ADOQuery2.fields.fields[10].asstring+')';
unit2.DataModule2.ADOCommand1.execute;
end;
unit2.DataModule2.ADOQuery2.next;
end;

Поля в таблицах баз текстовые все.

Но когда я запускаю проэкт на исполнение то получается ошибка:
Проэкт Project1.exe вызвал исключение класса EOleException с сообщением 'Число содержит синтаксическую ошибку в вырожении запроса '28.11.2002''


а если я ставлю вот так

inttostr(unit2.DataModule2.ADOQuery2.fields.fields[1].asinteger) или datetostr(unit2.DataModule2.ADOQuery2.fields.fields[1].asinteger)

получается ошибка

Проэкт Project1.exe вызвал исключение класса EConvertError с сообщением ''28.11.2002' is not a valid interger value'


Где или в чем я ошибся помогите плиз
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

надо оставить asString как было, но заключить в кавычки. Т.е. после выполнения этого сложения должно получиться:
DtStart='28.11.2002' а у тебя DtStart=28.11.2002 - это он не поймёт
Изображение
Ответить