Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / ADO+MS Sql Server, ноль записей / 13 сообщений из 13, страница 1 из 1
20.01.2014, 13:50
    #38531778
edvardoss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO+MS Sql Server, ноль записей
Доброго времени суток!
Запрос в SQL Server Manegment Studio отрабатывает норм (N записей >0)
ADO рекордсет возвращает 0
Код: 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.
Sub SServer_extractdata()
Dim conn As ADODB.Connection
Dim recset As ADODB.Recordset
Dim sql As String
Dim rnfrom As Range
Dim rn As Range
Dim x As Long: Dim y As Integer: Dim z As Integer
On Error Resume Next
Set rnfrom = Application.InputBox("Выберите 1 ячейку с текстом sql в примечании", "Ananiev_G:Request", Type:=8)
If rnfrom Is Nothing Then GoTo 10
If rnfrom.Cells.Count <> 1 Then GoTo 10
If rnfrom.Comment.Text = Null Then GoTo 10
On Error GoTo 0
On Error Resume Next
Set rn = Application.InputBox("Выберите ячейку начала импорта", "Ananiev_G:Request", Type:=8)
If rn Is Nothing Then GoTo 10
On Error GoTo 0
Set conn = New ADODB.Connection
conn.Open "Provider=SQLOLEDB;Data Source=SQL-AXAPTA-3;Initial Catalog=POSReports;user id=ananev-g;Trusted_Connection=Yes"
'Data Source - это Server; Initial Catalog - это БД
Let sql = Trim(Application.Clean(rnfrom.Comment.Text)) 'удаляем символ переноса строки
'Let sql = "use POSReports select top 100 customername from salesreportform1"
Debug.Print sql
Set recset = New ADODB.Recordset
With recset
    .ActiveConnection = conn
    On Error Resume Next
    .Open sql
    If Err.Number = -2147217900 Then
        MsgBox "Некорректный текст sql в примечании", vbCritical, "Ananiev_G:Allert"
        GoTo 10
    End If
End With
If (rn.Row + recset.RecordCount) >= 65636 Then
    MsgBox "Количество записей от стартовой ячейки превышает размеры листа по количеству строк", vbCritical, "Ananiev_G:Allert"
    GoTo 10
End If
If recset.RecordCount = -1 Then
    MsgBox "Запрос вернул 0 записей", vbCritical, "Ananiev_G:Allert"
    GoTo 10
End If
recset.MoveFirst
Let x = 0: Let y = 0: Let z = recset.Fields.Count
Do Until recset.EOF
For y = 0 To z - 1 Step 1 'Fields.Count-считает с 1 до N;recset.Fields()-считает с 0 до N
    Let rn.Offset(x, y) = recset.Fields(y)
Next
recset.MoveNext
Let x = x + 1
Loop
10: Set recset = Nothing
conn.Close
On Error GoTo 0
End Sub
'like


Прошу знающих помочь.
...
Рейтинг: 0 / 0
20.01.2014, 14:19
    #38531819
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO+MS Sql Server, ноль записей
в sql-запросе замени % на *
...
Рейтинг: 0 / 0
20.01.2014, 14:24
    #38531828
edvardoss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO+MS Sql Server, ноль записей
Shocker.Pro, не, не в этом дело, запрос в качетсве тестового взял простейший без like:
"select top 100 customername from salesreportform1"
...
Рейтинг: 0 / 0
20.01.2014, 14:27
    #38531840
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO+MS Sql Server, ноль записей
ага, тогда начинаем смотреть код
Код: vbnet
1.
2.
If recset.RecordCount = -1 Then
    MsgBox "Запрос вернул 0 записей", vbCritical, "Ananiev_G:Allert"

нарушена причинно-следственная связь. Наличие там -1 необязательно означает, что записей нет
...
Рейтинг: 0 / 0
20.01.2014, 14:28
    #38531841
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO+MS Sql Server, ноль записей
Надо так
Код: vbnet
1.
2.
If recset.EOF Then
    MsgBox "Запрос вернул 0 записей", vbCritical, "Ananiev_G:Allert"
...
Рейтинг: 0 / 0
20.01.2014, 14:30
    #38531846
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO+MS Sql Server, ноль записей
Еще есть такая штука - CopyFromRecordset - она вставит тебе все, что нужно в несколько тысяч раз быстрее
...
Рейтинг: 0 / 0
20.01.2014, 15:23
    #38531963
edvardoss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO+MS Sql Server, ноль записей
закоментил все on error resume next

споткнулся на If recset.EOF Then
"Операция не допускается если объект закрыт"
при том что блок
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
With recset
    .ActiveConnection = conn
'    On Error Resume Next
    .Open sql
    If Err.Number = -2147217900 Then
        MsgBox "Некорректный текст sql в примечании", vbCritical, "Ananiev_G:Allert"
        GoTo 10
    End If
End With


прошел без приключений
...
Рейтинг: 0 / 0
20.01.2014, 15:49
    #38532010
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO+MS Sql Server, ноль записей
а sql-запрос все тот же тестовый? попробуй просто SELECT 1 без всяких USE и т.п.
...
Рейтинг: 0 / 0
20.01.2014, 15:53
    #38532017
edvardoss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO+MS Sql Server, ноль записей
Код: plsql
1.
select 123


работает
...
Рейтинг: 0 / 0
20.01.2014, 15:55
    #38532019
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO+MS Sql Server, ноль записей
тогда еще раз ПОЛНОСТЬЮ покажи запрос, на котором не работает
...
Рейтинг: 0 / 0
20.01.2014, 15:58
    #38532023
edvardoss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO+MS Sql Server, ноль записей
убрал USE PosReports и заработало!
Shocker.Pro , спасибо!
...
Рейтинг: 0 / 0
20.01.2014, 16:13
    #38532040
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO+MS Sql Server, ноль записей
а кто говорилedvardossзапрос в качетсве тестового взял простейший без like:
"select top 100 customername from salesreportform1"??? тут ничего не сказано про use

по идее должно работать так
Код: sql
1.
set nocount on use posreports select....



хотя я немного удивился, что USE выдает какой-то возврат....
...
Рейтинг: 0 / 0
20.01.2014, 16:19
    #38532048
edvardoss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO+MS Sql Server, ноль записей
Shocker.Proа кто говорилedvardossзапрос в качетсве тестового взял простейший без like:
"select top 100 customername from salesreportform1"??? тут ничего не сказано про use

по идее должно работать так
Код: sql
1.
set nocount on use posreports select....



хотя я немного удивился, что USE выдает какой-то возврат....
я когда добавлял код на форум, намеренно не копировал из запроса Use PosReports, не думал что в нем дело.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / ADO+MS Sql Server, ноль записей / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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