ADOTable & Filtered

11 отговора 304 прегледа
#1

ADOTable & Filtered

Здравейте.
Свързал съм компонента ADOTable с таблица на Excel (TableDirect=TRUE) . Опитвам се по всякакъв начин да филтрирам данните по Дата, но не ми дава никакъв резултат. 10х на всеки който успее да ми помогне, или се опита.
Ето малко сорс.
Варианти, които не дават грешка но не дават резултат
1) AStr:='Date <= '''+FormatDateTime('dd.mm.yyyy',Date1)+'''';
2) AStr:='Date <= '''+FormatDateTime('dd.mm.yyyy hh:nn:ss',Date1)+'''';
3) Astr:='Date <= '''+DateTimeToStr(Date1)+'''';

ADOTableExcelFiles.Filtered:=TRUE;
ADOTableExcelFiles.Filter:=AStr;


Не мога да стартирам SQL заявка, защото ми дава грешка при From клаузата, не може да разпознае таблицата, предполагам заради знака '$', който се слага накрая при работа с Excel, за разпознаване на различните Sheet, като отделни таблици

Отговор
в отговор на TRN #2

Тъпо мнение...

ама не е ли по-добре да ползваш SQL query - а не Table компонент - по-бързо е (или поне така мисля) - и предаването на параметрите - които в твоя случай са дати - е по чисто реализирано - нямаш форматирането което правиш.
Все пак не съм сигурен дали това е решение - не съм работил с ADO.

---
Отговор
в отговор на TRN #3

Re: ADOTable &amp; Filtered

Здравей!
Проблема ти с курса на долара ще решиш с квадратни скоби ,
колкото до директната таблица мисля че трябва да не е истина защото ако е ти връщо всичко в таблицата.
Венцислав Александрийски

Отговор
в отговор на v_automation #4

Re: ADOTable &amp; Filtered

Програмата не е сложна. Следя един процес през Com порта, който ми връща данни (температура) през три секунди, и за да не се натрупва излишна информация в базата, на определ период (един ден) записвам данните в Excel файл (така иска клиента), но е възможно след това данните да се преглеждат и искам да ползвам директния запис от Excel за определения период.
Phantomas - както казваш не си работил с ADO, и на мен ми е втората програма, която пиша. Опитах с SQL, но има един малък проблем. ADOConnection приема Excel файла като база данни, а всеки Sheet като отделна таблица със съответното име, но слага автоматично знака ($) след името. Ако го махна в заявката, дава грешка, че няма такава таблица, ако го оставя ми дава грешка във From клаузата. Не разбирам това, което е писал v_automation, но ако нещо не се шегува ще опитам тези скоби (по между другото не познавам много добре и SQL заявките, но засега се оправям с това, което ми е необходимо). Вярно е че таблицата показва всички данни, но проблема е в това, че данните се визуализират и графично и трябва да се наблюдава определен отрязък от време. Дано изложението ми не е станало много дълго. Ще опитам да се боря с проблема.

Отговор
в отговор на TRN #5

Re: ADOTable &amp; Filtered

Слагай за име на таблицата [Sheet1$] и т.н.


_ _ _

Time is like a drug. Too much of it kills you.
Отговор
в отговор на TRN #6

Re: ADOTable &amp; Filtered

Здравей!
Освен за скобите бях ти споменал че табледирект=истина смятам че не е твоя случай.
Отговора на killall би трябвало да разсее съмненията око сериозността на моят отговор
Обърни внимание и на отговора но phantomas като размисъл за избор на оптимално решение за твоя случай
Венцислав Александрийски

Отговор
в отговор на v_automation #7

Re: ADOTable &amp; Filtered

Благодаря на всичко за отговорите. Не искам да се обиждате за неща, в които се съмнявам, но човек трябва да е работил с нещо за да е сигурен. Може да става вече даже и нагло, но се получава интересно нещо. По този начин ADOQuery се приема и се отваря, когато съм в режим на дизайн, но когато стартирам програмата, дава съобщение 'The Microsoft Jet database engine cannot open the file ''. It is already opened exclusively by another user, or you need permission to view its data'. Това го разбирам, че приема за име на таблицата '', или с други думи нищо. Все пак благодаря. Аз ще се мъча, а ако някой успее да ми помогне добре. Възможно е да са някои настройки. По между другото ето настройките на ConnectionString
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyPrograms\Delphi7\ExcelFiles\ElPort072004.xls;Extended Properties=Excel 8.0;Persist Security Info=False

Отговор
в отговор на TRN #8

Re: ADOTable &amp; Filtered

Може и да съм разбрал неправилно - ама като отвориш в дизайн тайм - таблицата - след като си настроиш полетата - я затвори!!! - запиши така и компилирай. Добави си код за отваряне на таблицата в run-time - и мисля, че с това трябва да ти приключи проблема.

---
Отговор
в отговор на TRN #9

Re: ADOTable &amp; Filtered

Здравей!
Защо не кажеш за какво мериш температурата през 3 минути и от какъв датчик взимаш сигнала, и каква е крайната цел на цялата гимнастика . Така по би могло да се измисли нещо по-така оптимално. Дори може и да се окаже че по-доброто решение не се нуждае от база данни
.
А по проблема ти с който се бориш в момента мога да ти кажа че джет драйвера отваря екселските файлове както ти пише в съобщението "ексклузивно", което означава че с файла може да има само една връзка, която в случая вече е направена от делфито и затова твоето приложение се скапва.
Виж съвета на фантомас, но имай придвид че подобен случай ще се получи и ако някой е отворил файлати от ексел и приложението ти се опита да се свързва в това време. Който превари да отвори файла печели .
Венцислав Александрийски

Отговор
в отговор на v_automation #10

Re: ADOTable &amp; Filtered

Благодаря на всички. Въпроса го реших (разбира се с ваша помощ) по с ледния начин. Поставих ADOQuery без никакви връзки към бази и т.н. На ConnectionString задавам стойностите в момента на стартиране на заявката. Ето по-долу примера.

BStr:='From '+'[Day10$]'+'';
with ADOQueryExcel do
begin
Close;
ConnectionString:=
'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyPrograms\Delphi7\Elport20\ExcelFiles\ElPort_07_2004.xls;Extended Properties=Excel 8.0;Persist Security Info=False';
SQL.Clear;
SQL.Add('SELECT * ');
SQL.Add(BStr);
Open;
end;

Отговор
в отговор на TRN #11

Re: ADOTable &amp; Filtered

видях че си успял с ADOQuery, но да питам за ADOTable/Filter:

ти баш така ли прилагаш филтъра


ADOTableExcelFiles.Filtered:=TRUE;
ADOTableExcelFiles.Filter:=AStr;


и ако да, дали да не опиташ така:


ADOTableExcelFiles.Filtered:=FALSE;
ADOTableExcelFiles.Filter:=AStr;
ADOTableExcelFiles.Filtered:=TRUE;


не съм сигурен как трябва да формираш AStr, но за начина за сетване на филтъра...

Am I evil?
Yes I am.
Отговор
в отговор на Hateras #12

Re: ADOTable &amp; Filtered

Ще опитам начина ти, но предпочитам с ADOQuery, по бързо е. 10х

Отговор