Передача параметров со значением null

Обсуждение Stimulsoft Reports.JS
Ответить
angolub
Сообщения: 16
Зарегистрирован: 11 май 2018, 13:51

Передача параметров со значением null

Сообщение angolub » 15 июн 2018, 07:05

Подскажите как передать в отчет параметр со значением null.
Мы работаем с PostgreSQL.

Как передать значение null через NodeJS?
Отчет не отображается - мой код:

Код: Выделить всё

report.dictionary.variables.getByName("userid").valueObject = "null";
Передать значение null не удается даже в Designer.
1. Параметр {userid} - Nullable.
2. SQL отрабатывает успешно. Просмотр данных также отрабатывает. В обоих случаях передаю null.
3. Передаю в предварительный просмотр значение null

Получаю ошибку:
[Exception Info]
Message: ERROR: 42601: syntax error at or near "null"

Source: Npgsql

StackTrace:
в Npgsql.NpgsqlState.<ProcessBackendResponses>d__0.MoveNext()
в Npgsql.ForwardsOnlyDataReader.GetNextResponseObject(Boolean cleanup)
в Npgsql.ForwardsOnlyDataReader.GetNextRowDescription()
в Npgsql.ForwardsOnlyDataReader.NextResultInternal()
в Npgsql.ForwardsOnlyDataReader..ctor(IEnumerable`1 dataEnumeration, CommandBehavior behavior, NpgsqlCommand command, NotificationThreadBlock threadBlock, Boolean preparedStatement, NpgsqlRowDescription rowDescription)
в Npgsql.NpgsqlCommand.GetReader(CommandBehavior cb)
в Npgsql.NpgsqlCommand.ExecuteReader(CommandBehavior cb)
в System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
в System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior)
в System.Data.Common.DbDataAdapter.Fill(DataTable dataTable)
в Stimulsoft.Report.Dictionary.StiSqlSource.RetrieveData(Boolean schemaOnly)
в Stimulsoft.Report.Dictionary.StiSqlAdapterService.ConnectDataSourceToData(StiDictionary dictionary, StiDataSource dataSource, Boolean loadData)
в Stimulsoft.Report.Dictionary.StiDataSource.Connect(StiDataCollection datas, Boolean loadData)
в Stimulsoft.Report.Dictionary.StiDataSourcesCollection.Connect(StiDataCollection datas, Boolean loadData)
в Stimulsoft.Report.Dictionary.StiDictionary.Connect(Boolean loadData, List`1 dataSources)
в Stimulsoft.Report.Engine.StiRenderProviderV2.ConnectToData(StiReport report)
в Stimulsoft.Report.Engine.StiRenderProviderV2.Render(StiReport report, StiRenderState state)
в Stimulsoft.Report.Engine.StiReportV2Builder.RenderSingleReport(StiReport masterReport, StiRenderState renderState)
в Stimulsoft.Report.StiReport.RenderReport(StiRenderState renderState)
в Stimulsoft.Report.StiReport.Render(StiRenderState renderState, StiGuiMode guiMode)
в Stimulsoft.Report.StiReport.Render(Boolean showProgress)
в Stimulsoft.Report.Design.Controls.StiDesignerPreviewControl.btRefresh_Click(Object sender, EventArgs e)

----------------------------
[Assemblies]
mscorlib, Version = 4.0.0.0
Stimulsoft.Base, Version = 2018.2.2.0
Stimulsoft.Report, Version = 2018.2.2.0
Stimulsoft.Report.Design, Version = 2018.2.2.0
Stimulsoft.Report.Import, Version = 2018.2.2.0
System.Data, Version = 4.0.0.0
System.Windows.Forms, Version = 4.0.0.0
WindowsBase, Version = 4.0.0.0
Пример SQL:

Код: Выделить всё

select u.fnam1, u.fnam2, u.fnam3, 
	h.opercod,h.jsondata,h.datereg from syshistory h,sysusers u 
   where h.usrid = u.usrid
   and case when {userid} is null then true else h.usrid = {userid} end
  and h.opercod = 172
   order by h.histid desc 

Спасибо.
HighAley
Сообщения: 1958
Зарегистрирован: 08 июн 2011, 07:36

Re: Передача параметров со значением null

Сообщение HighAley » 19 июн 2018, 19:42

Здравствуйте.

Какого типа переменная userid?
Есть одна версия по поводу вашего вопроса.
Значения переменных вставляются в запрос как строки.
У вас в запросе получается что-то вроде "null is null".
Я не уверен, что это корректный запрос. Может будет проще передавать значение -1 и написать выражение

Код: Выделить всё

where {userid} = -1 or h.usrid = {userid}
Спасибо.
angolub
Сообщения: 16
Зарегистрирован: 11 май 2018, 13:51

Re: Передача параметров со значением null

Сообщение angolub » 20 июн 2018, 08:57

Здравствуйте,

userid типа integer.
У вас в запросе получается что-то вроде "null is null".
Да так и должно быть. PostgreSQL такой запрос обрабатывает корректно.

Сейчас я использую -1, чтобы запрос работал. Но как раз такое решение является "костыльным".
HighAley
Сообщения: 1958
Зарегистрирован: 08 июн 2011, 07:36

Re: Передача параметров со значением null

Сообщение HighAley » 20 июн 2018, 14:27

Здравствуйте.

Не могли бы вы посмотреть какой запрос приходит на PostgreSQL, когда вы пытаетесь передать null?

Спасибо.
angolub
Сообщения: 16
Зарегистрирован: 11 май 2018, 13:51

Re: Передача параметров со значением null

Сообщение angolub » 27 июн 2018, 06:55

Здравствуйте,

К сожалению, не можем отловить SQL приходящий на сервер.

Мы сделали следующим образом:

1. параметр userid - string
2. SQL

Код: Выделить всё

select u.fnam1, u.fnam2, u.fnam3, 
	h.opercod,h.jsondata,h.datereg from syshistory h,sysusers u 
   where h.usrid = u.usrid
   and case when '{userid}' = 'null' then true else h.usrid::text = '{userid}' end
   and h.opercod = 172
   order by h.histid desc 
HighAley
Сообщения: 1958
Зарегистрирован: 08 июн 2011, 07:36

Re: Передача параметров со значением null

Сообщение HighAley » 28 июн 2018, 07:05

Здравствуйте.

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

Спасибо.
Ответить