Форум: "Базы";
Текущий архив: 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.012 c