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

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

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2011, 11:18   #11
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Цитата:
Сообщение от Dimarik163 Посмотреть сообщение
Теперь ошибка 1004: Application-difined or object-defined error.
а первый рекордсет выводит на лист, данные?

вообщем приводите весь код, по образам гадать тяжело
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 02.06.2011, 11:24   #12
Sparkman
220400
Форумчанин
 
Аватар для Sparkman
 
Регистрация: 21.05.2010
Сообщений: 726
По умолчанию

Линки между базами есть?
Если да, то так:

Код:
select a.[№],a.[ФИО]
from Таблица1@Линк1 a
union
select b.[№],b.[ФИО]
from Таблица2@Линк2 b
Cерьёзной помощи не ждите - помогаю в перерывах на "перекур".
Не существует ничего невозможного для человека, который не собирается ничего делать сам.
Не учите человека, если вы не его учитель.
Sparkman вне форума Ответить с цитированием
Старый 02.06.2011, 11:25   #13
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Я думаю,это должно спасти
Код:
Set rs = cn1.Execute(CommandText)
Set rs2 = cn2.Execute(CommandText)
R_Count=rs.RecordCount
Cells(1, 1).CopyFromRecordset rs
Cells(1 + R_Count, 1).CopyFromRecordset rs2
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 02.06.2011, 14:10   #14
Dimarik163
Пользователь
 
Регистрация: 01.06.2011
Сообщений: 13
По умолчанию

Код:
Sub Макрос2()
 

Source1 = "ODBC;DSN=Комтранс;Driver=Firebird/InterBase(r) driver;Dbname=192.168.30.1:D:\program\ib\AVTOSALON.GDB;CHARSET=WIN1251;UID=NEVEROV;Role=R_SERVICE;"
Source2 = "ODBC;DSN=Масленикова;Driver=Firebird/InterBase(r) driver;Dbname=192.168.50.1:E:\program\ib\AVTOSALON.GDB;CHARSET=WIN1251;UID=NEVEROV;Role=R_SERVICE;"


CommandText = "SELECT SUM( WORKS.KOL ) , WORKERS.FIO  FROM WORKERS INNER JOIN WORKS ON (WORKERS.ID = WORKS.WORKER_ID) INNER JOIN SERVICE ON (WORKS.SERVICE_ID = SERVICE.ID)  WHERE ( (SERVICE.DATA_ISP BETWEEN '01.05.11' and '31.05.11')) GROUP BY WORKERS.FIO"
  
Set cn1 = CreateObject("ADODB.Connection")
Set cn2 = CreateObject("ADODB.Connection")

cn1.Open Source1
cn2.Open Source2

Set rs1 = cn1.Execute(CommandText)
Set rs2 = cn2.Execute(CommandText)

R_Count = rs1.RecordCount
Cells(1, 1).CopyFromRecordset rs1
Cells(1 + R_Count, 1).CopyFromRecordset rs2

rs1.Close
cn1.Close

rs2.Close
cn2.Close


End Sub
Первый рекордсет выводит данные на лист и если убрать строчку "Cells(1 + R_Count, 1).CopyFromRecordset rs2", то все проходит нормально.

Линка между базами нету.

R_Count=rs.RecordCount Не помогло:1004: Application-difined or object-defined error.
Dimarik163 вне форума Ответить с цитированием
Старый 02.06.2011, 14:39   #15
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Только одно объяснение-проблема с rs2
Если все нормально,он должен вывести на лист данные
Первый не выводите
Код:
Cells(1 , 1).CopyFromRecordset rs2
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 02.06.2011, 14:39   #16
Dimarik163
Пользователь
 
Регистрация: 01.06.2011
Сообщений: 13
По умолчанию

Я так понимаю в моем случае RecordCount = -1
Если сделать Cells(2 + R_Count, 1).CopyFromRecordset rs2, то макрос завершается успешно, но при этом данные накладываются друг на друга.
Может бысть есть другой способ выгрузить данные?


Безымянный.JPG
Dimarik163 вне форума Ответить с цитированием
Старый 02.06.2011, 14:41   #17
Dimarik163
Пользователь
 
Регистрация: 01.06.2011
Сообщений: 13
По умолчанию

Цитата:
Сообщение от doober Посмотреть сообщение
Только одно объяснение-проблема с rs2
Если все нормально,он должен вывести на лист данные
Первый не выводите
Код:
Cells(1 , 1).CopyFromRecordset rs2
С rs2 все впорядке. Данные переносятся на лист.
Dimarik163 вне форума Ответить с цитированием
Старый 02.06.2011, 14:42   #18
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Тогда так
Код:
 Dim R_Count as Long

R_Count=rs1.RecordCount
If R_Count>0 then

Cells(1 , 1).CopyFromRecordset rs1
else
R_Count=0
end if

If rs2.RecordCount>0 then

Cells(1 + R_Count, 1).CopyFromRecordset rs2
end if
Анализ,обработка данных Недорого

Последний раз редактировалось doober; 02.06.2011 в 14:47.
doober вне форума Ответить с цитированием
Старый 02.06.2011, 14:51   #19
Dimarik163
Пользователь
 
Регистрация: 01.06.2011
Сообщений: 13
По умолчанию

Цитата:
Сообщение от doober Посмотреть сообщение
Тогда так
Код:
 Dim R_Count as Long

R_Count=rs1.RecordCount
If R_Count>0 then

Cells(1 , 1).CopyFromRecordset rs1
else
R_Count=0
end if

If rs2.RecordCount>0 then

Cells(1 + R_Count, 1).CopyFromRecordset rs2
end if
Тоже не работает. Ошибок нет, но и данных на листе нет.
Dimarik163 вне форума Ответить с цитированием
Старый 02.06.2011, 17:57   #20
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

может в массив перегрузить
Код:
Sub Макрос2()
 
Dim arr()
Source1 = "ODBC;DSN=Комтранс;Driver=Firebird/InterBase(r) driver;Dbname=192.168.30.1:D:\program\ib\AVTOSALON.GDB;CHARSET=WIN1251;UID=NEVEROV;Role=R_SERVICE;"
Source2 = "ODBC;DSN=Масленикова;Driver=Firebird/InterBase(r) driver;Dbname=192.168.50.1:E:\program\ib\AVTOSALON.GDB;CHARSET=WIN1251;UID=NEVEROV;Role=R_SERVICE;"


CommandText = "SELECT SUM( WORKS.KOL ) , WORKERS.FIO  FROM WORKERS INNER JOIN WORKS ON (WORKERS.ID = WORKS.WORKER_ID) INNER JOIN SERVICE ON (WORKS.SERVICE_ID = SERVICE.ID)  WHERE ( (SERVICE.DATA_ISP BETWEEN '01.05.11' and '31.05.11')) GROUP BY WORKERS.FIO"
  
Set cn1 = CreateObject("ADODB.Connection")
Set cn2 = CreateObject("ADODB.Connection")

cn1.Open Source1
cn2.Open Source2

Set rs1 = cn1.Execute(CommandText)
Set rs2 = cn2.Execute(CommandText)
'на всякий случай пробежимся по рекордсету
rs1.MoveLast: rs1.MoveFirst
R_Count = rs1.RecordCount
Cells(1, 1).CopyFromRecordset rs1
Cells(1 + R_Count, 1).CopyFromRecordset rs2

'если не поможет ..... хотя должно раскоментируйте этот блок попробуем через массив
'rs2.MoveLast: rs2.MoveFirst
'arr = rs2.GetRows(rs2.RecordCount)
'arr = Application.Transpose(arr)
'Cells(1 + R_Count, 1).Resize(UBound(arr), UBound(arr, 2)) = arr

rs1.Close
cn1.Close

rs2.Close
cn2.Close


End Sub
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234

Последний раз редактировалось R Dmitry; 02.06.2011 в 18:05.
R Dmitry вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Cформировать из 30 таблиц 1 500 000 000 таблиц, за 2 часа. kola672 Фриланс 12 02.11.2010 20:43
Сформировать из 30 таблиц 15 000 таблиц, за 15 минут. kola672 Фриланс 31 19.10.2010 01:22
Сложение операнд. rosemary Помощь студентам 7 23.06.2010 17:06
Сложение в БД Oleg Romanchuk Помощь студентам 5 24.11.2009 09:30
Сложение Droid Общие вопросы Delphi 14 07.05.2008 13:23