powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / ADO и SELECT * FROM
30 сообщений из 30, показаны все 2 страниц
ADO и SELECT * FROM
    #38281346
Фотография Ivan33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, добрый день!

Подскажите, пожалуйста. Как импортировать данные, если в первом столбце под заголовком нет данных в каждой строке?

Сделал импорт данных через ADO.

Код: vbnet
1.
2.
Public Function ADO_R(ByVal StrSql$, ByVal FilePath$, ByVal OutputRange As Range, _
ByVal FieldsName As Boolean, ByVal OutputFieldsName As Boolean) и т. д.



Делаю запрос:

Код: vbnet
1.
strSql2 = "SELECT * FROM ...



Когда в первом столбце под заголовком есть данные - всё нормально. Когда нет - виснет это дело.
Допустим добавил для эксперимента " " (пробел) в каждую строку под заголовком, чтобы сказать "данные есть" - всё хорошо и работает.
...
Рейтинг: 0 / 0
ADO и SELECT * FROM
    #38281358
Фотография Ivan33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, функция такая:

Код: vbnet
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.
Public Function ADO_R(ByVal StrSql$, ByVal FilePath$, ByVal OutputRange As Range, _
ByVal FieldsName As Boolean, ByVal OutputFieldsName As Boolean)

Dim sCon As String, FieldName As String
Dim rs As Object, cn  As Object
Set rs = CreateObject("ADODB.Recordset")
Set cn = CreateObject("ADODB.Connection")




If FieldsName Then FieldName = "Yes" Else FieldName = "No"
Select Case Val(Application.Version)
    Case Is < 12
        sCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & CurrentFile2 _
        & ";Extended Properties=""Excel 12.0 Xml;HDR=Yes" & FieldName & ";IMEX=1"";"
    Case Is >= 12
        sCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & CurrentFile2 _
        & ";Extended Properties=""Excel 12.0 Xml;HDR=Yes" & FieldName & ";IMEX=1"";"
End Select

cn.Open sCon
If Not cn.State = 1 Then Exit Function
Set rs = cn.Execute(StrSql)
If Not FieldsName Then OutputFieldsName = False
 If OutputFieldsName Then
    For i = 0 To rs.Fields.Count - 1
    OutputRange.Offset(0, i) = rs.Fields(i).Name
    Next
    Set OutputRange = OutputRange.Offset(1, 0)
 End If
 DoEvents
OutputRange.CopyFromRecordset rs
rs.Close:  cn.Close
Set cn = Nothing: Set rs = Nothing

End Function



Вызов такой:

Код: vbnet
1.
strSql2 = "SELECT * FROM [Лист1$]"
...
Рейтинг: 0 / 0
ADO и SELECT * FROM
    #38281380
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
help HDR = Yes "указывает что поставщик не будет включать диапазон ячеек (который может быть строка заголовка) первой строки в наборе записей
...
Рейтинг: 0 / 0
ADO и SELECT * FROM
    #38281389
Фотография Ivan33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Prohelp HDR = Yes "указывает что поставщик не будет включать диапазон ячеек (который может быть строка заголовка) первой строки в наборе записей не, первая строка нужна так или иначе. Поставил No. Всё равно.
Уточню ещё, что заголовки импортируются всегда. В первом столбце данных нет, а в -4м есть
...
Рейтинг: 0 / 0
ADO и SELECT * FROM
    #38281415
Фотография Ivan33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Структура файла для импорта такая. И в первмом столбце данных нет, даже пробелов. И вот тут глюк - зависает экцель.
...
Рейтинг: 0 / 0
ADO и SELECT * FROM
    #38281417
Фотография Ivan33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
добавляю пробелы в первую колонку и всё нормально.
...
Рейтинг: 0 / 0
ADO и SELECT * FROM
    #38281429
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan33,

Заголовки не должны быть пустые. Именно на это и намекал Shocker.Pro, как я полагаю.
...
Рейтинг: 0 / 0
ADO и SELECT * FROM
    #38281439
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_PristЗаголовки не должны быть пустые. Именно на это и намекал Shocker.Pro, как я полагаю.Извиняйте, файла не видел. Скорее всего именно из-за наличия пустых ячеек в первом столбце и спотыкается. Для БД первый столбец основополагающий(как правило там располагается нумерация полей).
...
Рейтинг: 0 / 0
ADO и SELECT * FROM
    #38281440
Фотография Ivan33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_PristIvan33,

Заголовки не должны быть пустые. Именно на это и намекал Shocker.Pro, как я полагаю. не, они у меня не пустые. они всегда есть. вопрос больше в том, как сделать, если уже во второй строке нет данных в первом столбце, но в других в той же строке есть.
...
Рейтинг: 0 / 0
ADO и SELECT * FROM
    #38281455
Фотография Ivan33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_PristThe_PristЗаголовки не должны быть пустые. Именно на это и намекал Shocker.Pro, как я полагаю.Извиняйте, файла не видел. Скорее всего именно из-за наличия пустых ячеек в первом столбце и спотыкается. Для БД первый столбец основополагающий(как правило там располагается нумерация полей). ага, понял. ну а если таблица такая как у меня, то всё пропало?
...
Рейтинг: 0 / 0
ADO и SELECT * FROM
    #38281533
Ivan33, Я выполнил твой запрос.
Правда, в 2003 эквселе и к именованному диапазону.
-----
Не люблю Progress OpenEdge
...
Рейтинг: 0 / 0
ADO и SELECT * FROM
    #38281563
кладовщик-2, сделал и так -тоже работает
Код: vbnet
1.
2.
3.
4.
5.
6.
Set Connection = New ADODB.Connection
Cnct = "Provider=Microsoft.ACE.OLEDB.12.0; "
Cnct = Cnct & "Data Source=" & DBFullName & ";"
Cnct = Cnct & "Extended Properties= Excel 12.0 Macro;"
Connection.Open ConnectionString:=Cnct
SqlString = "SELECT * FROM " & strExcelRange
...
Рейтинг: 0 / 0
ADO и SELECT * FROM
    #38281637
Фотография Ivan33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кладовщик-2Ivan33, Я выполнил твой запрос.
Правда, в 2003 эквселе и к именованному диапазону.
-----
Не люблю Progress OpenEdge
именованного диапазона там нет :( голый файл.
...
Рейтинг: 0 / 0
ADO и SELECT * FROM
    #38281715
Фотография Ivan33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кладовщик-2Ivan33, Я выполнил твой запрос.
Правда, в 2003 эквселе и к именованному диапазону.
-----
Не люблю Progress OpenEdge спасибо. но там экцель 2007 и именованных диапазонов там не будет.
...
Рейтинг: 0 / 0
ADO и SELECT * FROM
    #38281874
кладовщик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan33, а чо так?
Открываешь эту книгу программно, программно же создаешь именованный диапазон, сохраняешь-закрываешь - и все.
ADO+SQL.
Как тебе вар-т?
...
Рейтинг: 0 / 0
ADO и SELECT * FROM
    #38281880
кладовщик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan33 спасибо. но там экцель 2007 и именованных диапазонов там не будет.
Так правильней:
Ivan33, а чо так?
Открываешь эту книгу программно, программно же создаешь именованный диапазон, сохраняешь-закрываешь - и все - юзай ADO+SQL.
Как тебе вар-т?
-----
Не люблю Progress OpenEdge.
...
Рейтинг: 0 / 0
ADO и SELECT * FROM
    #38281940
Фотография Ivan33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кладовщикIvan33 спасибо. но там экцель 2007 и именованных диапазонов там не будет.
Так правильней:
Ivan33, а чо так?
Открываешь эту книгу программно, программно же создаешь именованный диапазон, сохраняешь-закрываешь - и все - юзай ADO+SQL.
Как тебе вар-т?
-----
Не люблю Progress OpenEdge. вариант нормальный. но хотелось бы проще. два уже есть: 1. столбец с номерами идёт первым 2. или столбец с пробелами идёт первым

думал, что я чего-то не знаю, а оно вона как получается.
...
Рейтинг: 0 / 0
ADO и SELECT * FROM
    #38281979
R Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan33,

Может от того что Вы функцию испоганили до неузнаваемости
Public Function ADO_R_Dmitry(ByVal StrSql$, ByVal FilePath$, ByVal OutputRange As Range, _
ByVal FieldsName As Boolean, ByVal OutputFieldsName As Boolean)
'==============================================================================
'*Описание функции : Возвращает набор записей Recordset с первой ячейки адреса,
'* указанного диапазона.
'*strSql - Конструкция SQL запроса.
'* FilePath - Полный путь к файлу включая имя и расширение.
'* OutputRange - адрес ячеки с которой начинается вывод данных.
'* FieldsName - используются или нет заголовки столбцов (True - False)
'* OutputFieldsName - вывод данных с заголовками или без (True - False), _
'==============================================================================
'* Автор R Dmitry (Дмитрий Русак dg_rusak@mail.ru skype: RDG_Dmitry) |
'* WM:_R269866874234 U144446690328 |
'==============================================================================
Dim sCon As String, FieldName As String
Dim rs As Object, cn As Object
Set rs = CreateObject("ADODB.Recordset")
Set cn = CreateObject("ADODB.Connection")
If FieldsName Then FieldName = "Yes" Else FieldName = "No"
Select Case Val(Application.Version)

Case Is < 12
sCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FilePath _
& ";Extended Properties=""Excel 8.0;HDR=" & FieldName & ";IMEX=1"";"
Case Is >= 12
sCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & FilePath _
& ";Extended Properties=""Excel 12.0;HDR=" & FieldName & ";IMEX=1"";"
End Select

cn.Open sCon
If Not cn.State = 1 Then Exit Function
Set rs = cn.Execute(StrSql)
If Not FieldsName Then OutputFieldsName = False
If OutputFieldsName Then
For i = 0 To rs.Fields.Count - 1
OutputRange.Offset(0, i) = rs.Fields(i).Name
Next
Set OutputRange = OutputRange.Offset(1, 0)
End If
DoEvents
OutputRange.CopyFromRecordset rs
rs.Close: cn.Close
Set cn = Nothing: Set rs = Nothing
End Function
...
Рейтинг: 0 / 0
ADO и SELECT * FROM
    #38281987
R Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
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.
Public Function ADO_R_Dmitry(ByVal StrSql$, ByVal FilePath$, ByVal OutputRange As Range, _
ByVal FieldsName As Boolean, ByVal OutputFieldsName As Boolean)
'==============================================================================
'*Описание функции : Возвращает набор записей Recordset с первой ячейки адреса,
'* указанного диапазона.
'*strSql - Конструкция SQL  запроса.
'* FilePath - Полный путь к файлу включая имя и расширение.
'* OutputRange - адрес ячеки с которой начинается вывод данных.
'* FieldsName - используются или нет заголовки столбцов (True - False)
'* OutputFieldsName - вывод данных с заголовками или без (True - False), _
'==============================================================================
'* Автор R Dmitry (Дмитрий Русак dg_rusak@mail.ru skype: RDG_Dmitry)          |
'* WM:_R269866874234 U144446690328                                            |
'==============================================================================
Dim sCon As String, FieldName As String
Dim rs As Object, cn  As Object
Set rs = CreateObject("ADODB.Recordset")
Set cn = CreateObject("ADODB.Connection")
If FieldsName Then FieldName = "Yes" Else FieldName = "No"
Select Case Val(Application.Version)

    Case Is < 12
        sCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FilePath _
          & ";Extended Properties=""Excel 8.0;HDR=" & FieldName & ";IMEX=1"";"
    Case Is >= 12
        sCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & FilePath _
        & ";Extended Properties=""Excel 12.0;HDR=" & FieldName & ";IMEX=1"";"
End Select

cn.Open sCon
If Not cn.State = 1 Then Exit Function
Set rs = cn.Execute(StrSql)
If Not FieldsName Then OutputFieldsName = False
 If OutputFieldsName Then
    For i = 0 To rs.Fields.Count - 1
    OutputRange.Offset(0, i) = rs.Fields(i).Name
    Next
    Set OutputRange = OutputRange.Offset(1, 0)
 End If
 DoEvents
OutputRange.CopyFromRecordset rs
rs.Close:  cn.Close
Set cn = Nothing: Set rs = Nothing
End Function
Sub GetFileName(ByRef OtputPath)
    With Application.FileDialog(msoFileDialogFilePicker)
        .Show
        If .SelectedItems.Count > 0 Then Set OtputPath = .SelectedItems
    End With
End Sub

Sub test()
strSql2 = "SELECT * FROM [Ввод$]"
GetFileName tt
If IsEmpty(tt) Then Exit Sub
Call ADO_R_Dmitry(strSql2, tt(1), Sheets(1).[a1], True, True)
End Sub

...
Рейтинг: 0 / 0
ADO и SELECT * FROM
    #38282006
Фотография Ivan33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
R DmitryIvan33,

Может от того что Вы функцию испоганили до неузнаваемости
Public Function ADO_R_Dmitry(ByVal StrSql$, ByVal FilePath$, ByVal OutputRange As Range, _
ByVal FieldsName As Boolean, ByVal OutputFieldsName As Boolean)
'==============================================================================
'*Описание функции : Возвращает набор записей Recordset с первой ячейки адреса,
'* указанного диапазона.
'*strSql - Конструкция SQL запроса.
'* FilePath - Полный путь к файлу включая имя и расширение.
'* OutputRange - адрес ячеки с которой начинается вывод данных.
'* FieldsName - используются или нет заголовки столбцов (True - False)
'* OutputFieldsName - вывод данных с заголовками или без (True - False), _
'==============================================================================
'* Автор R Dmitry (Дмитрий Русак dg_rusak@mail.ru skype: RDG_Dmitry) |
'* WM:_R269866874234 U144446690328 |
'==============================================================================
Dim sCon As String, FieldName As String
Dim rs As Object, cn As Object
Set rs = CreateObject("ADODB.Recordset")
Set cn = CreateObject("ADODB.Connection")
If FieldsName Then FieldName = "Yes" Else FieldName = "No"
Select Case Val(Application.Version)

Case Is < 12
sCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FilePath _
& ";Extended Properties=""Excel 8.0;HDR=" & FieldName & ";IMEX=1"";"
Case Is >= 12
sCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & FilePath _
& ";Extended Properties=""Excel 12.0;HDR=" & FieldName & ";IMEX=1"";"
End Select

cn.Open sCon
If Not cn.State = 1 Then Exit Function
Set rs = cn.Execute(StrSql)
If Not FieldsName Then OutputFieldsName = False
If OutputFieldsName Then
For i = 0 To rs.Fields.Count - 1
OutputRange.Offset(0, i) = rs.Fields(i).Name
Next
Set OutputRange = OutputRange.Offset(1, 0)
End If
DoEvents
OutputRange.CopyFromRecordset rs
rs.Close: cn.Close
Set cn = Nothing: Set rs = Nothing
End Function
а конкретней можно, чем именно? убрал копирайт?
...
Рейтинг: 0 / 0
ADO и SELECT * FROM
    #38282021
R Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan33,

Всем
...
Рейтинг: 0 / 0
ADO и SELECT * FROM
    #38282024
R Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan33,
Там и копирайта то нет, просто испоганили, до нерабочего состояния ))
...
Рейтинг: 0 / 0
ADO и SELECT * FROM
    #38282026
Фотография Ivan33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
R DmitryIvan33,

Может от того что Вы функцию испоганили до неузнаваемости
Public Function ADO_R_Dmitry(ByVal StrSql$, ByVal FilePath$, ByVal OutputRange As Range, _
ByVal FieldsName As Boolean, ByVal OutputFieldsName As Boolean)
'==============================================================================
'*Описание функции : Возвращает набор записей Recordset с первой ячейки адреса,
'* указанного диапазона.
'*strSql - Конструкция SQL запроса.
'* FilePath - Полный путь к файлу включая имя и расширение.
'* OutputRange - адрес ячеки с которой начинается вывод данных.
'* FieldsName - используются или нет заголовки столбцов (True - False)
'* OutputFieldsName - вывод данных с заголовками или без (True - False), _
'==============================================================================
'* Автор R Dmitry (Дмитрий Русак dg_rusak@mail.ru skype: RDG_Dmitry) |
'* WM:_R269866874234 U144446690328 |
'==============================================================================
Dim sCon As String, FieldName As String
Dim rs As Object, cn As Object
Set rs = CreateObject("ADODB.Recordset")
Set cn = CreateObject("ADODB.Connection")
If FieldsName Then FieldName = "Yes" Else FieldName = "No"
Select Case Val(Application.Version)

Case Is < 12
sCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FilePath _
& ";Extended Properties=""Excel 8.0;HDR=" & FieldName & ";IMEX=1"";"
Case Is >= 12
sCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & FilePath _
& ";Extended Properties=""Excel 12.0;HDR=" & FieldName & ";IMEX=1"";"
End Select

cn.Open sCon
If Not cn.State = 1 Then Exit Function
Set rs = cn.Execute(StrSql)
If Not FieldsName Then OutputFieldsName = False
If OutputFieldsName Then
For i = 0 To rs.Fields.Count - 1
OutputRange.Offset(0, i) = rs.Fields(i).Name
Next
Set OutputRange = OutputRange.Offset(1, 0)
End If
DoEvents
OutputRange.CopyFromRecordset rs
rs.Close: cn.Close
Set cn = Nothing: Set rs = Nothing
End Function
я согласен только на "искалечил", а не не испоганил :) при всё уважении к вам.
...
Рейтинг: 0 / 0
ADO и SELECT * FROM
    #38282028
Фотография Ivan33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
R DmitryIvan33,
Там и копирайта то нет, просто испоганили, до нерабочего состояния )) как умею, извините :)
...
Рейтинг: 0 / 0
ADO и SELECT * FROM
    #38282029
R Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan33,

договорились "Искалечил" :))
======
14377500 работает?
...
Рейтинг: 0 / 0
ADO и SELECT * FROM
    #38282032
Фотография Ivan33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
R DmitryIvan33,

договорились "Искалечил" :))
======
14377500 работает? на удивление, только не понимаю, что и в каком месте искалечил.
...
Рейтинг: 0 / 0
ADO и SELECT * FROM
    #38282035
R Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan33на удивление, только не понимаю, что и в каком месте искалечил.
Вот по этому и не надо калечить, а оставлять как оно было
...
Рейтинг: 0 / 0
ADO и SELECT * FROM
    #38282053
Фотография Ivan33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
R DmitryIvan33на удивление, только не понимаю, что и в каком месте искалечил.
Вот по этому и не надо калечить, а оставлять как оно было ну уж просветите ;)
...
Рейтинг: 0 / 0
ADO и SELECT * FROM
    #38282100
Фотография Ivan33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
R DmitryIvan33на удивление, только не понимаю, что и в каком месте искалечил.
Вот по этому и не надо калечить, а оставлять как оно было

во:) вернул всё назад и ещё был тут глюк (не совсем правильно работает это, если первый столбец не полный):

у меня там шёл дальше код

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Sheets("Ввод").Activate
Range("A1").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select

LastRow = Cells(65536, 1).End(xlUp).Row
LastCol = Cells(1, 255).End(xlToLeft).Column

SelectionAddress = Selection.Address


With ActiveSheet
 .ListObjects.Add(xlSrcRange, .Range(SelectionAddress), , xlYes).Name = _
        "Table1"
 End With
         

ActiveSheet.ListObjects("Table1").TableStyle = "TableStyleLight2"

Dim oSh As Worksheet
    Set oSh = ActiveSheet
    'remove table or list style
    oSh.ListObjects("Table1").Unlist
...
Рейтинг: 0 / 0
ADO и SELECT * FROM
    #38282208
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan33,

А не облом написать:
Код: vbnet
1.
strSql2 = "SELECT * FROM [Ввод$B:AI] ...


?
...
Рейтинг: 0 / 0
30 сообщений из 30, показаны все 2 страниц
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / ADO и SELECT * FROM
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]