![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]а к какому датасету привязан отчет?