• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Проблема с чтением данных из таблиц Sql

  • Автор темы Darker
  • Дата начала
D

Darker

Написал "синхронизатор" между базами Lotus и таблицами SQL. Данные из лотуса закидываются нормально, но затем не могу прочитать то что закинул. Из лотуса кидаю следующим образом:

[codebox]Sub Click(Source As Button)

Dim v As Variant
Dim sqlfields As Variant
Dim sqlfields1 As Variant

Dim item As NotesItem
sf="Select "
For i=Lbound(doc.Forms) To Ubound(doc.Forms)
sf=sf+{form="}+doc.Forms(i)+{" |}
Next
sf=Left(sf,Len(sf)-1)

Set col=db.Search(sf,Nothing,0)
If col.Count=0 Then
Msgbox "Ничего не найдено!"
End
End If
count=col.Count
Msgbox Cstr(count)+" документов"

sqlfields1=doc.sqlfields
Dim sfields As Variant
Dim fieldsTypes As Variant
If doc.AllFields(0)<>"" Then sqlfields1=doc.SQLfieldsList_1
Redim sqlfields(Ubound(sqlfields1))
Redim fieldsTypes(Ubound(sqlfields1))
For i=Lbound(sqlfields1) To Ubound(sqlfields1)
sqlfields(i)=Strleftback(sqlfields1(i),"^")
fieldsTypes(i)=Strrightback(sqlfields1(i),"^")
Next
sfields=Join(sqlfields,",")
con.ConnectTo(doc.Server1(0))
Set qry.Connection=con
Set result.Query=qry
' result.Execute
Dim g
For i=1 To col.Count
Set doc1=col.GetNthDocument(i)
v=""
For j=Lbound(sqlfields) To Ubound(sqlfields)
If doc1.HasItem(sqlfields(j)) Then
g=""
Set item=doc1.GetFirstItem(sqlfields(j))
If Isarray(item.Values) Then g=Trim(Cstr(item.Values(0)))
If g="" Then
v=v+"NULL,"
Else
Select Case fieldsTypes(j)
Case 11:
d=Cdat(g)
v=v+"'"+Cstr(Year(d))+"-"+Cstr(Month(d))+"-"+Cstr(Day(d))+"',"
Case -9, -10:v=v+"'"+g+"',"
Case Else:
v=v+""+g+","
End Select
End If
Else
v=v+"NULL,"
End If
Next
qry.SQL={Insert INTO }+doc.Tables(0)+{(}+sfields+{) Values(}+Left(v,Len(v)-1)+{)}
result.Execute
If i=100 Then Goto next1
Next
next1:
Msgbox "Закончено"
' result.Execute
result.Close(DB_CLOSE)
con.Disconnect
End Sub[/code]

Затем пытаюсь подсчитать кол-во закинутых мною записей. В свойствах таблицы написано реальное кол-во, но при программном чтении он возвращает 1.
Код:
Sub Click(Source As Button)
Dim ws As New NotesUIWorkspace
If doc.Tables(0)="" Then 
Msgbox "Укажите в какой таблице нужно произвести подсчет"
ws.CurrentDocument.GotoField("Tables")
End
End If
con.ConnectTo(doc.Server1(0))
Set result.Query=qry
qry.SQL="SELECT * FROM "+doc.tables(0)

Msgbox (result.Execute)
i=0
If result.Execute Then
Do
result.NextRow
i=i+1
Loop Until result.IsEndOfData
End If
Msgbox Cstr(i)
result.Close(DB_CLOSE)
con.Disconnect
End Sub[/codebox]

Помогите, пожалуйста, найти решение


через qry.SQL="SELECT COUNT(*) FROM "+doc.tables(0) подсчитывается.
 

Kizarek86

Green Team
20.07.2007
871
7
BIT
38
Доступ к данным в SQL есть?
Как пытаетесь прочитать данные?
 
D

Darker

Доступ есть, читаю через классы ODBCConnection
 

Kizarek86

Green Team
20.07.2007
871
7
BIT
38
Что именно не так читается?
Нет соединения? Данные не видятся?
Код в студию
и проверьте туда ли вы стучитесь при получении данных
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!