Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.05.28;
Скачать: CL | DM;

Вниз

QReport - не забывает старые данные, дублирует   Найти похожие ветки 

 
pmy482 ©   (2006-03-31 14:55) [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;
Затем идёт формирование этой таблицы заново опираясь на определёные условия:
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 в этой таблице записи были удалены - логично, НО откуда же формировался отчёт, если я всё поудаляла????


 
DSKalugin ©   (2006-03-31 18:49) [1]

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


 
pmy482 ©   (2006-04-01 12:53) [2]

dm.tblUnregPhone


 
DSKalugin ©   (2006-04-01 13:32) [3]

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

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

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


 
pmy482 ©   (2006-04-03 07:38) [4]

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


 
sniknik ©   (2006-04-03 08:32) [5]

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


 
pmy482 ©   (2006-04-03 09:27) [6]

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


 
sniknik ©   (2006-04-03 10:30) [7]

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


 
pmy482 ©   (2006-04-03 13:46) [8]

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


 
sniknik ©   (2006-04-03 14:31) [9]

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

возврат на [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 17:48) [10]

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

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

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

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

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


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


 
Johnmen ©   (2006-04-03 17:59) [11]

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


 
pmy482 ©   (2006-04-03 18:07) [12]

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



Страницы: 1 вся ветка

Текущий архив: 2006.05.28;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.038 c
15-1146599729
SergP
2006-05-02 23:55
2006.05.28
asm


1-1145460535
rantorira
2006-04-19 19:28
2006.05.28
сохранение древовидной структуры данных в файл


2-1147265255
antonn
2006-05-10 16:47
2006.05.28
вопрос по типу "file of byte"


15-1146811361
Rulikkk
2006-05-05 10:42
2006.05.28
Ищу openSource компонент, для отображения блок схем.


3-1144065445
beglec
2006-04-03 15:57
2006.05.28
ComboBox и Базы данных