Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.015 c
8-1135585258
Chaser
2005-12-26 11:20
2006.05.28
Как сделать снимок с экрана с курсором мыши?


15-1146719163
Логин
2006-05-04 09:06
2006.05.28
Выбор винта????


2-1147070660
Dstr
2006-05-08 10:44
2006.05.28
Компеляция ресурсов


6-1138388766
KLAUS
2006-01-27 22:06
2006.05.28
Ошибка сценария Interner Explorer


2-1146793670
eclipse
2006-05-05 05:47
2006.05.28
Строки в DBGrid и не только





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский