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

Вниз

ADO, EXCEL и типы данных.   Найти похожие ветки 

 
DmitryNekl ©   (2003-07-09 20:51) [0]

Вопрос довольно глупый, но все же надеюсь на вашу помощь.
Ситуация такая. Есть таблица в Экселе, в которой данные разных типов: и целые числа, и строки. Подключаемся к ней с помощью ADO и пытаемся выполнить запрос (объявления переменных и все лишнее я убрал):

function a(Field1, Field2, WorkSheet: string): string;
// Field - поле в Экселе, которое ищем
// WorkSheet - он и есть :)
begin
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add("SELECT DISTINCT " + Field1 + " FROM ["+ WorkSheet + "$]");
ADOQuery1.Active:=True;
ADOQuery1.ExecSQL;
ADOQuery1.First;
s:="";
For i:=0 to ADOQuery1.RecordCount-1 do
begin
s:=s + ADOQuery1.FieldByName(""+Field1+"").AsString;
ADOQuery2.SQL.Clear;
stmp:="SELECT DISTINCT "+Field2+" FROM ["+ WorkSheet + "$] WHERE "+ Field1+"="+""""+ADOQuery1.FieldByName(""+Field1+"").AsString+"""";
ADOQuery2.SQL.Add(stmp);
ADOQuery2.Active:=True;
ADOQuery2.ExecSQL;
и т.д.

Короче говоря, суть в том, что параметрами Field1 и Field2 можно управлять запросом. И хочется, чтобы эта функция работала с любыми данными.

Если данные в Экселе строковые, то все работает, как надо.
Если данные в Экселе числовые, то строка stmp:="SELECT DISTINCT "+Field2+" FROM ["+ WorkSheet + "$] WHERE "+ Field1+"="+""""+ADOQuery1.FieldByName(""+Field1+"").AsString+""""; приводит к ошибке "Несоответствие типов данных в выражении условия отбора". Если эту строку поменять на stmp:="SELECT DISTINCT "+Field2+" FROM ["+ WorkSheet + "$] WHERE "+ Field1+"="+ADOQuery1.FieldByName(""+Field1+"").AsString; (т.е. убрать кавычки), то все наоборот: с числами работает, а со строками - нет.

Вопрос: как написать универсальный запрос, который будет работать с любыми данными?

Заранее спасибо.


 
sniknik ©   (2003-07-09 22:15) [1]

делай приведение типа, вроде
SELECT iif(isNumber(Field1), CStr(Field1), Field1) as Field1 ...
всегда вернет строку (если конечно как говориш всего 2 типа в поле)
то же можно и в условии.

а вот универсальный для любых данных будет посложнее, но стоит ли? если нужно попробуй.



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

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

Наверх




Память: 0.47 MB
Время: 0.021 c
7-101007
vvip
2003-05-20 08:50
2003.07.31
Мониторинг com-порта


4-101025
Novichek
2003-05-28 15:00
2003.07.31
ShellExecute - неправильно использую или глюк в Windows XP?


1-100753
Orden
2003-07-16 15:07
2003.07.31
Rave-компоненты


1-100820
vvn
2003-07-17 14:58
2003.07.31
Help!!! TCustomControl сделать прозрачным


3-100593
paxer
2003-07-07 11:47
2003.07.31
Какие компоненты доступа к БД FireBird использовать?