Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2012, 13:35   #1
boomko55
Пользователь
 
Регистрация: 28.04.2012
Сообщений: 11
По умолчанию Взаимодействие excel с БД

Задача.
Дан файл excel в котором 2 листа по 7 столбцов и куча строк >40тыс. Необходимые данные из файла это первый и последний столбцы, и имеют форматы текстовый и дата соответственно.
В программе имеются 2 кнопки, 1 dbgrid, 1 datasource, 1 query, 1 datetimepicker.
Моя задача открыть эксель файл, найти нужные строки удовлетворяющие условию 7-ой столбец >= datetimepicker. Если это так, то 1-ый столбец эксель-файла сравнивается со столбцом enp в таблице ууу. Если это так то в dbgrid выводится вся строка выбранных столбцов базы. И так далее пока не проверятся все строки в эксель файле.
Код выглядит след. образом:
Цитата:
var
sheet2:variant;
s:integer;
date1:string;
begin
Excel := CreateOleObject('Excel.Application' );
Excel.DisplayAlerts:=False;
Excel.Visible := False;
Excel.Workbooks.Open['C:\Данные.xls'];
sheet2:=Excel.Workbooks[1].Worksheets[2];
date1:=DateToStr(DateTimePicker1.Da te);
for s:= 1 to 49999 do
begin
if date1=VarToStr(sheet2.Cells[s,7]) then
if query1.Active then;
Query1.ParamByName('enp1').AsString :=sheet2.Cells[s,1];
Query1.Open;
end;
Запрос выглядит след. образом:
Цитата:
SELECT ххх.IDPers, ууу.ENP, ххх.Type, ууу.IDPers , ууу.Surname, ууу.Name1, ууу.Name2, ууу.Phone
FROM ххх INNER JOIN
ууу ON ххх.IDPers = ууу.IDPers
where ууу.ENP is NOT NULL
and ууу.ENP = :enp1
and LEN(ууу.Phone)>12
and (left(ууу.Phone,4)=';;79' or left(ууу.Phone,4)=';;89' or left(ууу.Phone,2)='89' or left(ууу.Phone,2)='79')
and ххх.Type =2
В результате должен получится список с номерами и ФИО.
Эта программа работает неправильно. Я знаю почему неправильно, но не знаю как исправить. При нажатии кнопки он обращается к базе и т.д. Но в dbgrid ничего не выводит.
Прошу Вас, помогите решить эту задачу.

Последний раз редактировалось boomko55; 11.05.2012 в 13:38.
boomko55 вне форума Ответить с цитированием
Старый 15.05.2012, 11:05   #2
boomko55
Пользователь
 
Регистрация: 28.04.2012
Сообщений: 11
По умолчанию

Проблему так и не решил, мысли есть какие-нибудь?
boomko55 вне форума Ответить с цитированием
Старый 15.05.2012, 11:12   #3
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Если всё работает, но чтото идёт не так, то нужно пошагово изучать, что и куда там присваивается. Другово пути нету.

ну или скидывайте свой проект с БД и файлом екселя, мож кто посмотрит.
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 15.05.2012, 11:33   #4
boomko55
Пользователь
 
Регистрация: 28.04.2012
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Valio Посмотреть сообщение
Если всё работает, но чтото идёт не так, то нужно пошагово изучать, что и куда там присваивается. Другово пути нету.

ну или скидывайте свой проект с БД и файлом екселя, мож кто посмотрит.
Я объясню что не так.
Цитата:
if date1=VarToStr(sheet2.Cells[s,7]) then
if query1.Active then;
Query1.ParamByName('enp1').AsString :=sheet2.Cells[s,1];
Query1.Open;
Мне кажется именно эта часть кода работает неправильно, так как при запуске авторизация к базе появляется но в формочку dbgrid ничего не выводится.
Я делал примерно тоже самое но более простой вариант, вывод делал исключительно из базы, без всяких условий из excel. Была лишь 1 переменная date1 и ее я вводил из формы и проверял по базе все выводилось успешно.
Скорее всего я неправильно даю условие из excel.
boomko55 вне форума Ответить с цитированием
Старый 15.05.2012, 11:40   #5
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Что мешает поставить бряк и посмотреть что на самом деле сравнивается вот тут?

Код:
if date1=VarToStr(sheet2.Cells[s,7]) then
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 15.05.2012, 15:48   #6
boomko55
Пользователь
 
Регистрация: 28.04.2012
Сообщений: 11
По умолчанию

s - 1
date1 - '28.04.2012'
sheet2 - $0022355c


странно но при s=2 пишет тот же

sheet2 - $0022355c

И почему вообще он не дату показывает а фигню какую-то? Может конвертация VarToStr плохо сказывается?

Последний раз редактировалось boomko55; 15.05.2012 в 15:51.
boomko55 вне форума Ответить с цитированием
Старый 16.05.2012, 13:47   #7
boomko55
Пользователь
 
Регистрация: 28.04.2012
Сообщений: 11
По умолчанию

Есть мысли по этому поводу?
boomko55 вне форума Ответить с цитированием
Старый 16.05.2012, 14:16   #8
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Трудно сказать. Первое что приходит на ум:

Это дата в другом формате. Решение: перевести это значения в нужный формат используя функции работы с временем.
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Взаимодействие с ячейками при экспорте в Excel ZHDN Общие вопросы Delphi 0 28.07.2011 18:46
Взаимодействие программ C# Genesis Общие вопросы .NET 1 16.08.2010 10:31
Взаимодействие Excel с САПР (Autocad, SolidsWorks и др.) Tidus Microsoft Office Excel 1 10.02.2010 00:57
Взаимодействие C# и 1с Sparky Свободное общение 1 05.02.2010 04:31