Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/30: Рейтинг темы: голосов - 30, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 10.11.2011
Сообщений: 7

Передача данных из Firebird в Exel

11.11.2011, 04:01. Показов 5930. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
помогите, написать программу в VB, для переноса данных из базы firebird в лист Excel.
В бд ежедневно заносятся параметры, мне нужно проводить расчеты с этими данными. Для этого мне нужно занести их в лист Excel. Для этого я сделала кнопку, после ее нажатия организуется связь с бд, а также указывается период, за который мне нужны данные. В Excel у меня таблица из двух столбцов: в первом должны прописываться дни, а во втором показания из бд. Далее данные за все дни должны усредняться и переноситься в другой лист. Объясните, пожалуйста, как сделать, чтобы прописывались дни и как вытащить данные из базы.

Добавлено через 16 часов 16 минут
Помогите, пожалуйста. Мне нужно передавать данные из бд в лист екселя. в бд данные храняться по датам, а мне нужно выбирать из диапазона, причем диапазон может быть любым.
т.е. в екселе есть таблица, в которую в один столбец заносится дата, а в другой значения. как вытвщить одно значение я знаю, а как сделать последовательность я не знаю, это, наверное, должен быть какой-то цикл. типа задаем две даты: начало и конец периода, считаем количество дней и вытаскиваем данные и последовательно заносим в лист.
одно значение я вытаскиваю так:
Visual Basic
1
2
3
        rs.Open "select ( turbine.electrical_load ) from turbine where ( (date_reg >= '" + mydate1 + "')and (kod_turbine = '7') )", cn
        Лист11.Range("Е_ПТ_пт").Value = Round(rs.Fields(0).Value, 3)
        rs.Close
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.11.2011, 04:01
Ответы с готовыми решениями:

Передача всех данных из листа Exel в Access
как все данные из листа Exel передать в Access(можно в новую)

Данные из Firebird в Exel
Кто-нибудь может привести примерчик на VBA?Нужно из базы на удаленной машине вывести нескольких значения величин с разными id + общая...

Передача данных в Exel (закрывается рабочая форма при открытии Exel)
Помогите пожалуйста. почему закрывается моя форма при открытии Exel? procedure TForm26.suiButton22Click(Sender: TObject); const...

13
 Аватар для mc-black
2786 / 718 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
11.11.2011, 09:59
Могу слегка ошибаться в деталях, перебор делается как-то так
Visual Basic
1
2
3
4
5
6
7
rs.Open "select ( turbine.electrical_load ) from turbine where ( (date_reg >= '" + mydate1 + "')and (kod_turbine = '7') )", cn
rs.MoveFirst
Do While Not rs.EOF
    Лист11.Range("Е_ПТ_пт").Value = Round(rs.Fields(0).Value, 3)
    rs.Next
Loop
rs.Close
По какой технологии работаете с базой (ADO/DAO)?
1
0 / 0 / 0
Регистрация: 10.11.2011
Сообщений: 7
11.11.2011, 11:24  [ТС]
Спасибо, попробую.
ADO

Добавлено через 9 минут
Может я что-то не так делаю или я всего не понимаю, но у меня вылазит ошибка: method or date member not found. в строчке
Visual Basic
1
rs.Next
0
406 / 75 / 6
Регистрация: 31.01.2011
Сообщений: 111
Записей в блоге: 1
11.11.2011, 13:10
Зачем гонять циклом если можно выгрузить данные одним махом
Visual Basic
1
Лист11.Range("Е_ПТ_пт").CopyFromRecordset rs
да и в select у Вас одно поле, поэтому может есть смысл добавить туда необходимую дату ??

Visual Basic
1
2
3
4
5
rs.Open "select ( Round(turbine.electrical_load,3) ,turbine.date_reg)" _
& " from turbine where ( (date_reg >= '" + mydate1 + "')and (kod_turbine = '7') )", cn
 Лист11.Range("Е_ПТ_пт").CopyFromRecordset rs
 
rs.Close
1
0 / 0 / 0
Регистрация: 10.11.2011
Сообщений: 7
11.11.2011, 13:31  [ТС]
Цитата Сообщение от R Dmitry Посмотреть сообщение
Visual Basic
1
2
3
4
rs.Open "select ( Round(turbine.electrical_load,3) ,turbine.date_reg)" _
& " from turbine where ( (date_reg >= '" + mydate1 + "')and (kod_turbine = '7') )", cn
 Лист11.Range("Е_ПТ_пт").CopyFromRecordset rs
rs.Close
это что-то у меня не получилось: Драйвер ODBC не поддерживает требуемые свойства.
объясните, пожалйста поподробней, если можно

Добавлено через 1 минуту
Цитата Сообщение от mc-black Посмотреть сообщение
Visual Basic
1
2
3
4
5
6
7
rs.Open "select ( turbine.electrical_load ) from turbine where ( (date_reg >= '" + mydate1 + "')and (kod_turbine = '7') )", cn
rs.MoveFirst
Do While Not rs.EOF
 Лист11.Range("Е_ПТ_пт").Value = Round(rs.Fields(0).Value, 3)
 rs.Next
Loop
rs.Close
вместо Next оказывается нужно использовать MoveNext
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
11.11.2011, 13:33
PEA, ничего что я ставлю теги во всех твоих сообщениях? Ты не против?
1
406 / 75 / 6
Регистрация: 31.01.2011
Сообщений: 111
Записей в блоге: 1
11.11.2011, 13:35
Цитата Сообщение от PEA Посмотреть сообщение
это что-то у меня не получилось: Драйвер ODBC не поддерживает требуемые свойства.
объясните, пожалйста поподробней, если можно

Добавлено через 1 минуту

вместо Next оказывается нужно использовать MoveNext
Возможно Firebird не поддерживает функцию Round, у меня к сожалению нет FB что бы проверить,
попробуйте без округлений вывести данные :
Visual Basic
1
2
3
4
rs.Open "select (turbine.electrical_load,turbine.date_reg)" _
& " from turbine where ( (date_reg >= '" + mydate1 + "')and (kod_turbine = '7') )", cn
Лист11.Range("Е_ПТ_пт").CopyFromRecordset rs
rs.Close
1
0 / 0 / 0
Регистрация: 10.11.2011
Сообщений: 7
11.11.2011, 13:51  [ТС]
с функцией Round все нормально, я ее испльзовала все работало, дело в чем-то другом
0
406 / 75 / 6
Регистрация: 31.01.2011
Сообщений: 111
Записей в блоге: 1
11.11.2011, 13:59
Цитата Сообщение от PEA Посмотреть сообщение
с функцией Round все нормально, я ее испльзовала все работало, дело в чем-то другом
Я использовал Round не в excel, а в запросе. Поэтому и говорю что вероятнее всего ошибка возникает именно из-за этого.
в последнем посте я использовал запрос без Round
1
0 / 0 / 0
Регистрация: 10.11.2011
Сообщений: 7
11.11.2011, 14:14  [ТС]
Без Round, тоже не получилось, таже ошибка
0
406 / 75 / 6
Регистрация: 31.01.2011
Сообщений: 111
Записей в блоге: 1
11.11.2011, 14:20
Цитата Сообщение от PEA Посмотреть сообщение
Без Round, тоже не получилось, таже ошибка
А на какой строке ругается?
на rs.Open
или
на
Visual Basic
1
Лист11.Range("Е_ПТ_пт").CopyFromRecordset rs
(хотя на ней не должно)
и если можно приведите весь код
1
0 / 0 / 0
Регистрация: 10.11.2011
Сообщений: 7
12.11.2011, 10:12  [ТС]
ругается на rs.Open
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
'ýòà îïöèÿ çàñòàâëÿåò ñðåäó âûïîëíåíèÿ âûäàâàòü îøèáêó åñëè ïåðåìåííàÿ íå îáúÿâëåíà ÿâíî
Option Explicit
 
'ñîçäàåì îáúåêò Connection
Public cn As New ADODB.Connection
 
Public mydate1 As String
Public mydate2 As String
Public time_cond1 As Integer
Public bOK As Boolean
Public bOKt As Boolean
Public Const LOCALE_SDECIMAL = &HE ' Ðàçäåëèòåëü äåñÿòè÷íûõ ðàçðÿäîâ
Public Const LOCALE_SDATE = &H1D ' date separator
'èìïîðò API-ôóíêöèè "Sleep" èç áèáëèîòåêè "kernel32.dll"
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Const LOCALE_SYSTEM_DEFAULT& = &H800
Public Const LOCALE_USER_DEFAULT& = &H400
 
Const cMAXLEN = 255
 
Private Declare Function apiGetLocaleInfo Lib "kernel32" _
Alias "GetLocaleInfoA" (ByVal Locale As Long, _
ByVal LCType As Long, ByVal lpLCData As String, _
ByVal cchData As Long) As Long
 
Private Declare Function apiSetLocaleInfo Lib "kernel32" _
Alias "SetLocaleInfoA" (ByVal Locale As Long, _
ByVal LCType As Long, ByVal lpLCData As String) As Long
 
Function GetLocaleInfo(lngLCType As Long) As String
Dim lngLocale As Long
Dim strLCData As String, lngData As Long
Dim lngX As Long
 
strLCData = String$(cMAXLEN, 0)
lngData = cMAXLEN - 1
lngX = apiGetLocaleInfo(LOCALE_USER_DEFAULT, lngLCType, _
strLCData, lngData)
If lngX <> 0 Then
GetLocaleInfo = Left$(strLCData, lngX - 1)
End If
End Function
 
Function SetLocaleInfo(lngLCType As Long, lValue) As String
On Error Resume Next
Dim lngLocale As Long
Dim strLCData As String
Dim lngX As Long
 
strLCData = String$(cMAXLEN, 0)
strLCData = CStr(lValue) & String(cMAXLEN - Len(CStr(lValue)), 0)
lngX = apiSetLocaleInfo(LOCALE_USER_DEFAULT, lngLCType, _
strLCData)
If lngX <> 0 Then
SetLocaleInfo = Left$(strLCData, lngX - 1)
End If
End Function
 
Sub pLoadFromDB()
    Dim sA1, sA2, sA, sB, s, sC As String
    Dim i As Integer
    
    sA1 = InputBox("Ââåäèòå àäðåñ ñåðâåðà Firebird", , shtSettings.Range("fb_host").Value)
    If sA1 <> "" Then shtSettings.Range("fb_host").Value = sA1
    sA2 = InputBox("Ââåäèòå ïóòü ê ôàéëó áàçû Firebird ('.FDB') (â ôàéëîâîé ñèñòåìå ñåðâåðà Firebird)", , shtSettings.Range("db_path").Value)
    If sA2 <> "" Then shtSettings.Range("db_path").Value = sA2
    sA = sA1 + ":" + sA2
    'ñòàòóñ
    frmStatus.l1 = "[" + sA + "] "
    sC = ThisWorkbook.FullName
    frmStatus.l2 = "[" + sC + "] "
    
    sB = shtSettings.Range("fbclient").Value
    If sB <> "" Then shtSettings.Range("fbclient").Value = sB
    
    'ñîáèðàåì ñòðîêó äëÿ ñîåäèíåíèÿ
    s = shtSettings.Range("conn_str1").Value + sA + _
        shtSettings.Range("conn_str2").Value + sB + _
        shtSettings.Range("conn_str3").Value
    
    cn.ConnectionString = s
    cn.Open
    
    bOK = False
    bOKt = False
    
    'ïîêàçûâàåì ôîðìó âûáîðà äàòû
    frmSelectDate.Show
    'ïîêàçûâàåì ôîðìó ââîäà ÷èñëà ÷àñîâ ðàáîòû àãðåãàòîâ
    frmSetTimes.Show
    
    'åñëè ïîëüçîâàòåëü â äèàëîãàõ íàæàë OK (à íå çàêðûë êðåñòèêîì)
    If bOK And bOKt Then
        frmStatus.Repaint
        Sleep 200
        
        'çàïèñûâàåì âðåìÿ â ÿ÷åéêè òàáëèöû
        Ëèñò11.Range("tau_ðàá_ÏÒ1").Value = mytime1
        Ëèñò11.Range("tau_ðàá_Ò11").Value = mytime2
        Ëèñò11.Range("tau_ðàá_Ò21").Value = mytime3
        
    time_cond1 = DateDiff("d", mydate1, mydate2)
    'shtSettings.Range("B19").Value = time_cond1
    
        'ñîçäàåì è íàñòðàèâàåì Recordset
        Dim rs As New ADODB.Recordset
        rs.CursorType = adOpenKeyset
        rs.LockType = adLockOptimistic
[/BASIC]
Это весь код до извлечения данных из БД, далеее я их извлекаю и вставляю в ячейки екселя. Вот здесь у меня проблема. я вытаскиваю значения в зависимости от даты, от начальной до конечной, мне нужны все значения и не известно сколько их будет, диапазон дат может быть различным. Пока я делаю так:
[BASIC]       rs.Open "select ( turbine.electrical_load ) from turbine where ( (date_reg >= '" + mydate1 + "')and (kod_turbine = '7') )", cn
        While Not rs.EOF
       Лист11.Range("Э_пт_ПТ1" & CStr(i)).Value = Round(rs.Fields(0).Value, 3)
    i = i + 1
    rs.MoveNext
    Wend
Но вот в строке переноса данных в ячейку вылазит ошибка. Помогите, если можно.
0
406 / 75 / 6
Регистрация: 31.01.2011
Сообщений: 111
Записей в блоге: 1
12.11.2011, 10:50
Visual Basic
1
  Лист11.Range("Э_пт_ПТ1" & CStr(i)).Value
Эта конструкция у Вас не правильная, Вы не правильно обращаетесь к ячейкам листам.
У вас имеется именованный диапазон :
Visual Basic
1
Лист11.Range("Э_пт_ПТ1")
Вам же в данном случае лучше обращаться к Cells

Visual Basic
1
Cells(1,1)=Range("A1")=[a1]
пример: заполним ячейки с А1 по А10

Visual Basic
1
2
3
for i=1 to 10
cells(i,1)="Значение: " & i
next
1
0 / 0 / 0
Регистрация: 10.11.2011
Сообщений: 7
14.11.2011, 16:35  [ТС]
Спасибо, Вам большое. У меня все работает!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.11.2011, 16:35
Помогаю со студенческими работами здесь

Передача данных из SQL в Exel
Доброго времени суток! Есть проблема - данные по полям таблицы отображаются только до определенного момента (когда бывших админов...

передача разнотипных данных из Exel в Access
Здравствуйте! помогите мне, пожалуйста! Имеется таблица в EXEL с разными типами данных. Данные нужно передать в три разные таблицы Access....

Перенос данных из одного файла Exel в другой файл Exel
Добрый день всем! Копался сам, но так и не нашел ответа. Вопрос следующий. Есть временный файл эксель(после работы с ним удаляется)....

Запрос на выборку и передача запроса в Excel
суть такая есть база 1 таблица в ней 50 колонок мне нужно по 5 колонкам выбрать запись а потом эту запись перенести в EXEL ...

Распределение данных по разным таблицам в exel при заполнении общей базы данных
При создании базы данных по оборотам компаний и формировании отчета по каждой из них, я не знаю как правильно сделать так, чтобы при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru