Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

QReport - не забывает старые данные, дублирует [D7, Access]


pmy482 ©   (2006-03-31 14:55:00) 

я хочу сгенерировать отчёт, на основе одной таблицы, содержащей один, единственный столбец. Перед генерацией эта таблица каждый раз очищается:
    dm.qrDinamic.Close;
    dm.qrDinamic.SQL.Clear;
    dm.qrDinamic.SQL.Add('Delete * From UnRegistered_phone');
    dm.qrDinamic.ExecSQL;
    dm.tblUnregPhone.Active:=false;
    dm.tblUnregPhone.Active:=true;
Затем идёт формирование этой таблицы заново опираясь на определёные условия:
dm.qrNumber.Open;
    dm.qrNumber.First;
    For i:=1 to dm.qrNumber.RecordCount do
    begin
         dm.tblDannye.First;
         if dm.tblDannye.Lookup('phone', VarToStr(dm.qrNumber.FieldValues['phone']),'phone')<>dm.qrNumber.FieldValues['ph one']
            then
                 begin
                   dm.tblUnregPhone.Append;
                   dm.tblUnregPhone.FieldByName('Unregistered_phone').Value:= dm.qrNumber.FieldValues['phone'];
                   dm.tblUnregPhone.Post;
                   dm.qrNumber.Next;
                 end
              else dm.qrNumber.Next;
    end;

После делаю опять обновление этой таблицы и вывод отчёта:
    frmReport.Show;
    dm.tblUnregPhone.Edit;
    dm.tblUnregPhone.UpdateRecord;
    frmReport.QuickRep1.Update;
    frmReport.QuickRep1.Preview;

Проблема в следующем:
1) каждый раз, когда я создаю отчёт данные повторяются дважды. Сначала один блок потом повторение в том же порядке
2) я попробовала закомментировать блок формирования записей в таблице и получила в результате - отчёт сформировался единжды, НО - заглянув Access в этой таблице записи были удалены - логично, НО откуда же формировался отчёт, если я всё поудаляла????


pmy482   (2006-04-03 18:07:00) [1]

А вот это сработало, спасибо...


Johnmen   (2006-04-03 17:59:00) [2]

SELECT phone.phone
FROM phone LEFT JOIN dannye ON phone.PHONE = dannye.PHONE
WHERE  dannye.PHONE IS NULL


pmy482   (2006-04-03 17:48:00) [3]

> при разных конектах...

- у меняя теперь один коннект, я же написала -  я добавила компоненту ADOConnection1 и присвоила свойству Connection каждого набора данных из этой БД... Он один...

> по хорошему ее следует совсем убрать, а данные получать нормальным запросом.

-  Как сделать SQL запросом, чтобы выбрать все данные из одной таблицы, которых нету в другой?

SELECT phone.phone
FROM phone INNER JOIN dannye ON phone.PHONE = dannye.PHONE
WHERE  phone.phone not in (dannye.PHONE);


не возвращает ни одного значения, хотя они есть, а как по другому не знаю, по крайней мере в SQL...


sniknik   (2006-04-03 14:31:00) [4]

> Попробовала следовать вашему совету - оказалось непринципиально...
неправильно "следовал"

возврат на [0]

> Перед генерацией эта таблица каждый раз очищается:
>    dm.qrDinamic.Close;
>   dm.qrDinamic.SQL.Clear;
>   dm.qrDinamic.SQL.Add('Delete * From UnRegistered_phone');
>   dm.qrDinamic.ExecSQL;
>   dm. tblUnregPhone.Active:=false;
>   dm. tblUnregPhone.Active:=true; Затем идёт формирование этой таблицы заново опираясь на определёные условия:

очищается выделенная таблица, к ней же  прописан запрос у выделенного компанента? так?
при разных конектах, время сброса буфера может превышать время отработки команд, чтение в tblUnregPhone будет идти из кеша, старых данных...
при одном коннекте (чему я сказал "следовать") кеш и на запись и на чтение будет один, из которого удалили из того и прочитали...

сделай проверку, сразу после этого кода поставь  if dm.tblUnregPhone.RecordCount > 0 then "чудо!!!";

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

> А вот в таблице tblUnregPhone нет ключевых полей и индексов, может быть стоит задать...
по хорошему ее следует совсем убрать, а данные получать нормальным запросом.


pmy482   (2006-04-03 13:46:00) [5]

Попробовала следовать вашему совету - оказалось непринципиально...
Всё тоже самое... ADOTable заменила на ADODataSet, ADOConnection добавила ... Видимо проблема где-то рядом, но я её не вижу... А вот в таблице tblUnregPhone нет ключевых полей и индексов, может быть стоит задать...


sniknik   (2006-04-03 10:30:00) [6]

> но думаю что это не принципиально...?
принципиально (это вообще самая принципиальныя вещь во всем ADO)
> А соединение с базой статическое через свойство ConnectionString
тоже принципиально, и скорее всего именно в этом твой "глюк", вместо ConnectionString надо использовать ADOConnection, причем он должен быть общий на все компаненты. (вообще конечно по задаче, но в общем случае 1 база - 1 коннект)


pmy482   (2006-04-03 09:27:00) [7]

Нет, знаете я использую ADO.  Для tblUnregPhone беру компоненту ADOTable(ADODB), может быть конечно стоит взять вместо неё ADODataSet, но думаю что это не принципиально...? А соединение с базой статическое через свойство ConnectionString компоненты ADOTable


sniknik   (2006-04-03 08:32:00) [8]

такой странный дополнительный вопрос... а ADOConnection у тебя используется? или строки прописаны непосредственно в компоненте? или по конненкту на каждый компонент создано? или ничего этого нет и ты (не дай бог) BDE используеш?
(записи могут кешироваться... причины могут быть разные, но ты можеш получать данные не из базы, а из кеша движка)


pmy482   (2006-04-03 07:38:00) [9]

Нет, на * Access  не ругается, он замечательно всё удаляет, НО...
Ситуация:
1 -ый заход:запускаю программу как есть... Она там что-то делает... находит нужные записи, добавляет их в tblUnregPhone и выдаёт отчёт с опреелённым количеством записей. Закрываю.
2-ой заход:коментирую ту часть процедуры, где идёт добавление записей, и компилирую снова... В результате нажав на нужный пункт меню, который запускает эту процедуру, получаю сформированный отчёт с тем же самым количеством записей, тут же не закрывая смотрю в Access - записи из tblUnregPhone удалены, она пуста... Закрываю.
3-ий заход:Оставляю всё как есть ничего не разкомментирываю. Компилирую снова - отчёт пуст... т.е. он забывает через раз


DSKalugin   (2006-04-01 13:32:00) [10]

Delete *From UnRegistered_phone
На звезду акцесс не ругается разве? убери, поэтому и не удаляет старое

   dm.tblUnregPhone.Edit;
   dm.tblUnregPhone.UpdateRecord;

замени на dm.tblUnregPhone.Refresh


pmy482   (2006-04-01 12:53:00) [11]

dm.tblUnregPhone


DSKalugin   (2006-03-31 18:49:00) [12]

а к какому датасету привязан отчет?


Наверх

Титульная страница Поиск, карта сайта Написать письмо