Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 30.07.2013, 07:07
demon-sheff demon-sheff вне форума
Прохожий
 
Регистрация: 24.06.2013
Сообщения: 29
Версия Delphi: Delphi 7
Репутация: 10
Печаль Помогите с запросом

Доброе время суток уважаемые программисты! Не могли бы вы помочь мне в следующем вопросе. Имеется таблица в EXCEL в ней 5 столбцов надо их отправить в бд по следующим запросам:
добавление
INSERT INTO ZKOKS.OLD_NUMBER (ID, REG_ID, TYPE, NUM)
VALUES (:ID, :REG_ID, :TYPE, :NUM)


изменение
UPDATE ZKOKS.OBJ
SET INV_NUM = :INV_NUM, CAD_NUM = :CAD_NUM
WHERE (OBJ.CAD_NUM = 'список')

подключение к базе я реализовал, таблицу выгрузил в StringGrid? а как связать эту таблицу по средством запроса с БД не знаю. Прошу Вашей помощи. Заранее благодарен!
Вложения
Тип файла: 7z OLD_NUMBER.7z (7.9 Кбайт, 3 просмотров)
Ответить с цитированием
  #2  
Старый 30.07.2013, 12:10
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

А с чего вдруг в StringGrid? Сей компонент не заточен под работу с базами. Используйте TDBGrid.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 30.07.2013, 13:25
demon-sheff demon-sheff вне форума
Прохожий
 
Регистрация: 24.06.2013
Сообщения: 29
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Сделал через DBGrid, а как дальше реализовать?
Ответить с цитированием
  #4  
Старый 30.07.2013, 15:27
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Поскольку вам надо делать запрос, то подключение через OLE вам не поможет, значит подключаемся к таблице через ADO. Используем примерно такую строку подключения:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Отпуска.xls;Extended Properties=Excel 8.0;Persist Security Info=False

Далее для проверки выполняем запрос к нужному листу в таблице:
select * from [Лист1$]

Все данные с листа экселя прочитаны.

С подключением и чтением данных разобрались. Теперь поясните ваш пост.
1. Вы пишете 5 столбцов, а в запросе вижу только 4.
2. Из экселя считываются все данные или есть критерий какой-то
3. В какую базу надо записать? Об этом ни слова.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 31.07.2013, 11:11
demon-sheff demon-sheff вне форума
Прохожий
 
Регистрация: 24.06.2013
Сообщения: 29
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Поскольку вам надо делать запрос, то подключение через OLE вам не поможет, значит подключаемся к таблице через ADO. Используем примерно такую строку подключения:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Отпуска.xls;Extended Properties=Excel 8.0;Persist Security Info=False

Далее для проверки выполняем запрос к нужному листу в таблице:
select * from [Лист1$]

Все данные с листа экселя прочитаны.

Как раз таки я так и сделал.

1.Насчет столбцов можно увидеть в архиве
2.Из экселя, который я выгрузил в DBGrid необходимы по первому запросу 4 поля, а вот по второму другие 2 (но они тоже имеются в таблице)
3. В базу ORACLE надо выгрузить (подключение к ней реализовал через SQLConnection)
Ответить с цитированием
  #6  
Старый 31.07.2013, 13:55
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Ага, уже проясняется. Конечно тут вроде напрашиваются гетерогенные запросы, но я в них не силен, особенно с подключением к ораклу, а потому пойдем нешустрым, но надежным путем.
(Непосредственно для передачи данных нам грид не потребуется. Разве что посмотреть, что собственно копируется.)
Значит имеем 2 подключения к разным базам. Пишем такой код:
Код:
SQLQuery1.SQL.Text := 'insert into OracleTable (Fld1,Fld2,Fld3,Fld4,Fld5) Values(:Val1, :Val2, :Val3, :Val4, :Val5)';
while not AdoQuery1.Eof
do begin
     SQLQuery1.Params.ParamValues['Val1'] := AdoQuery1.FieldValues['Fld1'];
     SQLQuery1.Params.ParamValues['Val2'] := AdoQuery1.FieldValues['Fld2'];
     SQLQuery1.Params.ParamValues['Val3'] := AdoQuery1.FieldValues['Fld3'];
     SQLQuery1.Params.ParamValues['Val4'] := AdoQuery1.FieldValues['Fld4'];
     SQLQuery1.Params.ParamValues['Val5'] := AdoQuery1.FieldValues['Fld5'];
     SQLQuery1.ExecSQL;
     AdoQuery1.Next;
     end;
Подставьте вместо OracleTable имя таблицы куда грузим, и вместо FldN имена полей в таблицах оракла и экселя.
Вроде должно работать.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 31.07.2013 в 14:00.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
demon-sheff (01.08.2013)
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 05:01.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025