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

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

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

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

Работа с переменными

  • Автор темы Hedg
  • Дата начала
H

Hedg

Есть поле ListBox
По выбранному занчению нужно запросом вытянуть значени в другое поле.
Делаю так

s:=@GetField("ListBoxFiled");
@DbCommand("ODBC":"NoCache";"uel";"lotus";"lotus01";"SELECT SUM_PAYMENT_CURRENCY from DBA.SALES_WHOLESALE where number_document='s'")

И никаких реакций, поле не заполняется.
 
G

Guest

Попробуй вместо:
"SELECT SUM_PAYMENT_CURRENCY from DBA.SALES_WHOLESALE where number_document='s'"

написать:

"SELECT SUM_PAYMENT_CURRENCY from DBA.SALES_WHOLESALE where number_document='"+@text(s)+"'"
 
D

Domino6

<!--QuoteBegin-Hedg+19:05:2006, 12:08 -->
<span class="vbquote">(Hedg @ 19:05:2006, 12:08 )</span><!--QuoteEBegin-->s:=@GetField("ListBoxFiled");
[snapback]36190" rel="nofollow" target="_blank[/snapback]​
[/quote]
и заменить на
s:=ListBoxFiled;
 
H

Hedg

<!--QuoteBegin-Юлия+19:05:2006, 13:51 -->
<span class="vbquote">(Юлия @ 19:05:2006, 13:51 )</span><!--QuoteEBegin-->"SELECT SUM_PAYMENT_CURRENCY from DBA.SALES_WHOLESALE where number_document='"+@text(s)+"'"
[snapback]36197" rel="nofollow" target="_blank[/snapback]​
[/quote]

Работает. Ура. Благодарствую.
 
H

Hedg

Возникла ещё одна проблемма.

есть поле ComboBox в него выбираются значения из базы SyBase по дате.
Дата берётся из поля типа Date/Time.

Запрос на выборку выглядит следующим образом:
@DbCommand("ODBC":"NoCache";"uel";"lotus";"lotus01";"SELECT number_document from DBA.SALES_WHOLESALE where DATE(date_check)='2006-04-12')

Формат даты должен быть YYYY-MM-DD

Дату преобразовываю так
@Right(@Text(@GetField("Way_billDate"));4)+"-"+@Right(@Left(@Text(@GetField("Way_billDate"));5);2)+"-"+@Left(@Text(@GetField("Way_billDate"));2)

Но вот сделать что-то типа

da:=@Right(@Text(@GetField("Way_billDate"));4)+"-"+@Right(@Left(@Text(@GetField("Way_billDate"));5);2)+"-"+@Left(@Text(@GetField("Way_billDate"));2)
@DbCommand("ODBC":"NoCache";"uel";"lotus";"lotus01";"SELECT number_document from DBA.SALES_WHOLESALE where DATE(date_check)='"+@Text(da)+"'")
или так
@DbCommand("ODBC":"NoCache";"uel";"lotus";"lotus01";"SELECT number_document from DBA.SALES_WHOLESALE where DATE(date_check)='"+@Text(@Right(@Text(@GetField("Way_billDate"));4)+"-"+@Right(@Left(@Text(@GetField("Way_billDate"));5);2)+"-"+@Left(@Text(@GetField("Way_billDate"));2))+"'")

не получается.
 
D

Domino6

<!--QuoteBegin-Hedg+19:05:2006, 16:16 -->
<span class="vbquote">(Hedg @ 19:05:2006, 16:16 )</span><!--QuoteEBegin-->Формат даты должен быть YYYY-MM-DD

Дату преобразовываю так
[snapback]36212" rel="nofollow" target="_blank[/snapback]​
[/quote]

Код:
y:=@text(@year(Way_billDate));
m:=@text(@Month(Way_billDate));
d:=@text(@Day(Way_billDate));
mm:=@leftBAck("0"+m;2)
dd:=@leftBAck("0"+d;2)
fulldate:=y+"-"+mm+"-"+d

и дальше по коду
 
H

Hedg

<!--QuoteBegin-Domino6+19:05:2006, 18:30 -->
<span class="vbquote">(Domino6 @ 19:05:2006, 18:30 )</span><!--QuoteEBegin-->y:=@text(@year(Way_billDate));
m:=@text(@Month(Way_billDate));
d:=@text(@Day(Way_billDate));
mm:=@leftBAck("0"+m;2)
dd:=@leftBAck("0"+d;2)
fulldate:=y+"-"+mm+"-"+d
[snapback]36220" rel="nofollow" target="_blank[/snapback]​
[/quote]

У меня такая конструкция не работает- пишет No main or selection expression in formula 'd'
 
D

Domino6

<!--QuoteBegin-Hedg+22:05:2006, 10:01 -->
<span class="vbquote">(Hedg @ 22:05:2006, 10:01 )</span><!--QuoteEBegin-->У меня такая конструкция не работает- пишет No main or selection expression in formula 'd'
[snapback]36334" rel="nofollow" target="_blank[/snapback]​
[/quote]
Матчасть

Допиши в конце

fulldate:=y+"-"+mm+"-"+d;
""
 
H

Hedg

<!--QuoteBegin-Domino6+22:05:2006, 10:38 -->
<span class="vbquote">(Domino6 @ 22:05:2006, 10:38 )</span><!--QuoteEBegin-->Допиши в конце

fulldate:=y+"-"+mm+"-"+d;
""
[snapback]36343" rel="nofollow" target="_blank[/snapback]​
[/quote]

Не работает, ничего не вычисляется. Проблема не в этом, преобразование даты я могу делать каким угодно способом.

Мне нужно из поля взять дату, преобразовать и подставить её в запрос, чтобы он вернул мне список (поле ComboBox)
и от туда выбирирать одно из значений.
 
H

Hedg

значит так, поле Way_billDate - тип Date/Time
из этого поля получаем дату и преобразовываем в формат YYYY-MM-DD
запихиваем в поле NUMBER_DOCUMENT - тип ComboBox
дата запихивается в запрос для выборки значений из поля базы SyBase
Код:
@DbCommand("ODBC":"NoCache";"uel";"lotus";"lotus01";"SELECT number_document from DBA.SALES_WHOLESALE where DATE(date_check)='data'")

затем поле SUM_PAYMENT_CURRENCY - тип Number
запросом выводит значения основываясь на значениие поля NUMBER_DOCUMENT
Код:
s:=@GetField("NUMBER_DOCUMENT");
@DbCommand("ODBC":"NoCache";"uel";"lotus";"lotus01";"SELECT SUM_PAYMENT_CURRENCY from DBA.SALES_WHOLESALE where number_document='"+@Text(s)+"'")

Если в запрос вставить просто значение даты
Код:
@DbCommand("ODBC":"NoCache";"uel";"lotus";"lotus01";"SELECT number_document from DBA.SALES_WHOLESALE where DATE(date_check)='2006-05-22'")
То всё работает.

И ещё вопросы
1. почему-то нельзя в данной форме использовать команду @Command([RefreshWindow]) - ругается что запрещены команды @ и другие UI функции в данном контексте.

2. Данная форма работает только для моего пользователя, для других(даже админов) ругается что не может выполнить @db функцию
 
D

Domino6

<!--QuoteBegin-Hedg+22:05:2006, 11:27 -->
<span class="vbquote">(Hedg @ 22:05:2006, 11:27 )</span><!--QuoteEBegin-->2. Данная форма работает только для моего пользователя, для других(даже админов) ругается что не может выполнить @db функцию
[snapback]36362" rel="nofollow" target="_blank[/snapback]​
[/quote]
У них не настроем ОДБС

tDate:='2006-05-22';
@DbCommand("ODBC":"NoCache";"uel";"lotus";"lotus01";"SELECT number_document from DBA.SALES_WHOLESALE where DATE(date_check)="+tDate+"\"")
 
H

Hedg

<!--QuoteBegin-Domino6+22:05:2006, 11:59 -->
<span class="vbquote">(Domino6 @ 22:05:2006, 11:59 )</span><!--QuoteEBegin-->tDate:='2006-05-22';
@DbCommand("ODBC":"NoCache";"uel";"lotus";"lotus01";"SELECT number_document from DBA.SALES_WHOLESALE where DATE(date_check)="+tDate+"\"")
[snapback]36368" rel="nofollow" target="_blank[/snapback]​
[/quote]

Не работает - <Data Access Application Layer> Could not execute @db Function

tDate:='2006-05-22'; это значение не постоянно а выбирается из поля Way_billDate (в котором эта дата собственно и задаётся)
 
G

Guest

Ты уверен, что конструкция:
s:=@GetField("NUMBER_DOCUMENT");
Возвращает значение:
'2006-05-22'
Или другую дату в кавычках?

Перепроверь. Скорее всего глюк там.
А ОДБС можно настроить. :)
 
H

Hedg

<!--QuoteBegin-Юлия+22:05:2006, 16:16 -->
<span class="vbquote">(Юлия @ 22:05:2006, 16:16 )</span><!--QuoteEBegin-->s:=@GetField("NUMBER_DOCUMENT");
[snapback]36404" rel="nofollow" target="_blank[/snapback]​
[/quote]

Просто такая конструкция работает в другом поле, а там формат 0963/05/1 и ничё работает.
s:=@GetField("NUMBER_DOCUMENT"); правильно передаёт если использовать например тип поля Text или DialogList, а вот в ComboBox мне проверить не удалось, так что скорее всего проблема именно в самом типе поля.

Может кто-то покажет как это сделать на Lotus Script, а то в нём я деревянный.
 
H

Hedg

Проблема решена путём использования поля типа - DialogList
ComboBox - не правильно обрабатывает получаемые данные.
 
H

Hedg

Наконец-то всё работает, только беспокоят 2 момента.

1. Иногда в базе появляются 300000 документов - открыть которые нельзя.

2. Если в базе нет никаких записей на данную дату, то при замене даты на любую другую ,запрос к базе ничего не возвращает.


Код:
sa:=@GetField("data")
@DbCommand("ODBC":"NoCache";"uel";"lotus";"lotus01";"SELECT number_document from DBA.ISSUE_GOODS where DATE(date_check)='"+sa+"'")
 
G

Guest

А из-за чего они появляются? Когда возникает такая ошибка? Почему вы уверены, что они появляются? Что пишет при попытки открыть такой документ?

??? Уточните где меняется дата? Каким образом (код)? Каково значение поля, которое поменяли, и тип.
 
H

Hedg

<!--QuoteBegin-Юлия+25:05:2006, 13:36 -->
<span class="vbquote">(Юлия @ 25:05:2006, 13:36 )</span><!--QuoteEBegin-->А из-за чего они появляются?
[snapback]36659" rel="nofollow" target="_blank[/snapback]​
[/quote]
Из-за чего появляеются незнаю.
<!--QuoteBegin-Юлия+25:05:2006, 13:36 -->
<span class="vbquote">(Юлия @ 25:05:2006, 13:36 )</span><!--QuoteEBegin-->Когда возникает такая ошибка?
[snapback]36659" rel="nofollow" target="_blank[/snapback]​
[/quote]
Отловить момент появления пока не удалось.
<!--QuoteBegin-Юлия+25:05:2006, 13:36 -->
<span class="vbquote">(Юлия @ 25:05:2006, 13:36 )</span><!--QuoteEBegin-->Почему вы уверены, что они появляются?
[snapback]36659" rel="nofollow" target="_blank[/snapback]​
[/quote]
Потому что база запускается путой, а потом в ней вдруг оказывается дофига документов, открыть которые нельзя.
<!--QuoteBegin-Юлия+25:05:2006, 13:36 -->
<span class="vbquote">(Юлия @ 25:05:2006, 13:36 )</span><!--QuoteEBegin-->Что пишет при попытки открыть такой документ?
[snapback]36659" rel="nofollow" target="_blank[/snapback]​
[/quote]
Немогу сейчас сказать так как щас они все удалены и снова пока не появлялись.

<!--QuoteBegin-Юлия+25:05:2006, 13:36 -->
<span class="vbquote">(Юлия @ 25:05:2006, 13:36 )</span><!--QuoteEBegin-->??? Уточните где меняется дата? Каким образом (код)? Каково значение поля, которое поменяли, и тип.
[snapback]36659" rel="nofollow" target="_blank[/snapback]​
[/quote]
Дата меняется в ручную - поле типа Date/Time

Переделывая всё на LT столкнулся с той же проблемой запихнуть значение переменной в звпрос.

Код:
Sub Click(Source As Button)

Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim db As NotesDatabase
Dim da As Variant
Set uidoc = workspace.CurrentDocument
Set doc = uidoc.Document
Set db = doc.ParentDatabase

Dim con As New ODBCConnection
Dim qry As New ODBCQuery
Dim res As New ODBCResultSet
Dim fRc As Integer
Dim strProductID As String

da = doc.GetItemValue("ch")
fRc = con.ConnectTo("uel","lotus","lotus01")

If fRc Then
Set qry.Connection = con		
qry.SQL = "SELECT number_document FROM DBA.ISSUE_GOODS WHERE DATE(date_check)=?data?"
Set res.Query = qry
Call res.SetParameter("data","da")
fRc = res.Execute	
If fRc Then
Do
res.NextRow
strProductID = res.GetValue("number_document")
'Add product to list
Messagebox strProductID
Loop Until res.IsEndOfData	
Else
Messagebox "Unable to execute query."
End If
fRc = con.Disconnect	
Else
Messagebox "Unable to connect."	
End If

End Sub

Опять же если прописать в запросе дату - запрос выполняется, но передать её с помощью переменной не получается.
 
Мы в соцсетях:

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