powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / ADO+MS Sql Server, ноль записей
13 сообщений из 13, страница 1 из 1
ADO+MS Sql Server, ноль записей
    #38531778
edvardoss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
Запрос в 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
ADO+MS Sql Server, ноль записей
    #38531819
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в sql-запросе замени % на *
...
Рейтинг: 0 / 0
ADO+MS Sql Server, ноль записей
    #38531828
edvardoss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, не, не в этом дело, запрос в качетсве тестового взял простейший без like:
"select top 100 customername from salesreportform1"
...
Рейтинг: 0 / 0
ADO+MS Sql Server, ноль записей
    #38531840
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ага, тогда начинаем смотреть код
Код: vbnet
1.
2.
If recset.RecordCount = -1 Then
    MsgBox "Запрос вернул 0 записей", vbCritical, "Ananiev_G:Allert"

нарушена причинно-следственная связь. Наличие там -1 необязательно означает, что записей нет
...
Рейтинг: 0 / 0
ADO+MS Sql Server, ноль записей
    #38531841
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо так
Код: vbnet
1.
2.
If recset.EOF Then
    MsgBox "Запрос вернул 0 записей", vbCritical, "Ananiev_G:Allert"
...
Рейтинг: 0 / 0
ADO+MS Sql Server, ноль записей
    #38531846
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще есть такая штука - CopyFromRecordset - она вставит тебе все, что нужно в несколько тысяч раз быстрее
...
Рейтинг: 0 / 0
ADO+MS Sql Server, ноль записей
    #38531963
edvardoss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
закоментил все 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
ADO+MS Sql Server, ноль записей
    #38532010
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а sql-запрос все тот же тестовый? попробуй просто SELECT 1 без всяких USE и т.п.
...
Рейтинг: 0 / 0
ADO+MS Sql Server, ноль записей
    #38532017
edvardoss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
select 123


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

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



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

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



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


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