Как заполнить combobox из datatable
Добрый день всем; я хотел бы задать новый вопрос, если вы не возражаете:
Я пытаюсь эмигрировать старую систему Access 2010 в сетевое приложение, которое я разрабатываю с помощью VB net 2017.
В приложении Access поле combobox заполняется из свойства Source Row этого поля со следующей инструкцией sql:
SELECT dbo_articulos.Id_art, dbo_articulos.desc As Descripción, dbo_articulos.fecha_compra As Fecha, IIf(Not IsNull([dbo_articulos].[fac_Origen]),[dbo_proveedor].[nombre] & " [Compra Nacional]",IIf([dbo_articulos_factura].[estatus] = 99,"CANCELADA","ACTIVA")) AS Status, dbo_articulo_proveedor.nombre FROM dbo_articulos INNER JOIN dbo_proveedores ON dbo_articulos.proveedor_id = dbo_proveedores.proveedor_id WHERE (((dbo_articulos_grupo) = 1)) ORDER BY dbo_articulos.Id ASC, dbo_articulos.factura ASC;
Я использую тот же код в строковой переменной (Qrye), чтобы заполнить dataTable этим кодом:
Da = New SqlDataAdapter(Qrye, Cn) Da.Fill(Dt) Combo_Articulos.DataSource = Dt
Но в инструкции "IIf" в коде (содержащей "Not IsNull") он посылает мне сообщение об ошибке, сообщающее мне "неправильный синтаксис рядом со словом "Not"", например, если он не распознает функцию "Not IsNull".
Я пытался изменить его на Is NotDBNull, IsNot Null, но ошибка остается там или говорит мне, что NotDbNull не является распознанной функцией. Я думаю, что мне нужно было бы только закодировать функцию "Not Null", закодированную там. Он прекрасно работает в Access, но Ной в VB net.
Я был бы очень признателен за любую помощь, которую кто-нибудь мог бы мне оказать, или, может быть, есть лучший способ заполнить эту комбинацию, чем эта; например, сущность ADO или что-то в этом роде.
Мне также нужно показать все столбцы, к которым я обращаюсь, и даже заголовки, которые я просто до сих пор не могу найти, как это сделать.
Что я уже пробовал:
Я провел много тестов и изменил код, насколько это было возможно, чтобы получить те же результаты. Я даже подумал о том, чтобы заполнить datatable полными данными в таблицах, а затем последовательно зациклить его и выполнить необходимые мне тесты и сравнения, а затем использовать
.AddItem
метод, но я уверен, что это должен быть лучший способ и менее элементарный, чем этот.
Maciej Los
Функция isnull[^] очень хорошо известна функция MS Access, и Вы можете использовать ее в OleDb. Поделитесь своим точным оператором запроса (со всеми конкатенациями строк) и строкой подключения.
Miguel Altamirano Morales
Рад снова связаться с вами, Мацей; я уже обновил свой вопрос. Весь код моего SQL-запроса находится там, и соединение с базой данных было правильно установлено, когда моя программа VB достигает этой точки.
Вся проблема (я думаю) в том, что VB Net 2017 не распознает функцию "Not IsNull" в начале оператора "IIf". Я думал, что это было заявление "IIf", которое не было признано, но я сделал тест, и он хорошо работает.
То, что я пытаюсь достичь, - это заполнить комбинацию в Коде доступа VB Net 2017 con VB. Я просто скопировал его таким, как он есть, с функцией "Not isNull".
Maciej Los
Рад снова тебя слышать, Мигель.
Как я уже упоминал, функция IsNull хорошо известна и может быть использована в OleDb. Довольно часто я им пользуюсь. Никогда не сообщал о проблемах. На первый взгляд ваш запрос содержит двойные кавычки, которые могут быть причиной ваших проблем. Вот почему я хочу видеть все заявление, например::Dim query = "Your query here"
Miguel Altamirano Morales
Эй!! может быть, ошибка заключается в утверждении "IIf"!!!.
Я проверю
Maciej Los
Это может быть причиной вышеупомянутой ошибки.
Miguel Altamirano Morales
Сейчас меня нет в офисе, завтра я сниму двойные кавычки и посмотрю, сработает ли это. Я также сделаю некоторые тесты, чтобы увидеть, поддерживается ли оператор 'IIf' в таком запросе.
Спасибо тебе, Мацей !!!