|
|
|
Junior Member
      
участник
Last Login: 26.02.2007 17:21
Сообщ.: 15,
Visits: 31
|
|
Необходимо чтобы в запрос вместо where Завод = подставлялось значение factory = item_zavod() может кто подскажет,что я делаю не так,заранее большое спасибо!
cnn.ConnectionString = m_sConn2 Dim sql As String cmd.Parameters.Add("@factory", OleDbType.Integer, factory) sql = "select * from [‹Ёбв1$] where (Завод = @factory)" cmd = New OleDb.OleDbCommand(sql, cnn) cnn.Open() myRead = cmd.ExecuteReader()'выдает ошибку не задан один из параметровDo While myRead.Read()
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
| Во-первых, третий параметр метода Add это размер колонки, а не его значение. Значение параметра можно к примеру так присвоить: cmd.Parameters.Add("@factory", OleDbType.Integer).Value = factory Здесь используется тот факт, что метод Add возвращает объект типа OleDbParameter которому и присваивается значение. Во-вторых, почему ты сначала добавляешь параметр, а потом заново создаешь команду? Ты таким образом теряшь свой параметр.
|
|
|
|
|
Junior Member
      
участник
Last Login: 26.02.2007 17:21
Сообщ.: 15,
Visits: 31
|
|
на строку - myRead = cmd.ExecuteReader() выдает ошибку,хотя код исправила как советовали - Отсутствует значение для одного или нескольких требуемых параметров.
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
Еще один момент я упустил. У тебя же не MSSQL? Скорее всего дело в том что провайдер не поддерживает именованные параметры и в запросе на месте параметра надо указывать вопросительный знак. Параметры в этом случае будут браться из коллекции по порядку, а не по имени. То есть твой код должен выглядеть так:sql = "SELECT * FROM [‹Ёбв1$] WHERE (Завод = ?)" ... cmd.Parameters.Add("@factory", OleDbType.Integer).Value = factory ... Имя параметра в методе Add при этом можно оставить так оно все равно игнорируется.
|
|
|
|
|
Junior Member
      
участник
Last Login: 26.02.2007 17:21
Сообщ.: 15,
Visits: 31
|
|
| я работаю с Excel-файлом Private m_sConn2 As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = c:\Project117Form\ГотПродBASIC1.xls;Extended Properties = ""Excel 8.0; HDR=YES""" factory = 3 cnn.ConnectionString = m_sConn2 cmd = New OleDb.OleDbCommand("select *from [Лист1$] where (Завод = ?)", cnn) cmd.Parameters.Add("@factory", OleDbType.Integer).Value = factory cnn.Open() Dim myArray_prodVes(0) As Double 'массив данных продукция вес Dim myArray_prodVlag(0) As Double 'массив данных продукция влажность Dim summ_ves As Double Dim i As Integer Dim work_prod(0) As Double 'произведение myArray_prodVes и myArray_vlagnost i = 0 myRead = cmd.ExecuteReader() 'в этот цикл не заходит,выполняла пошагово и выдает что 'summ_ves = 0,похоже что не читает данные.если условие в запрос не ставить,выполняеться Do While myRead.Read() If IsDBNull(myRead.Item("Вага")) = True Then myArray_prodVes(i) = 0 Else myArray_prodVes(i) = myRead.Item("Вага") summ_ves += myArray_prodVes(i) End If ReDim Preserve myArray_prodVes(UBound(myArray_prodVes) + 1) i = i + 1 Loop cnn.Close() MsgBox(summ_ves)
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
| Попробуй запрос без параметров и вставляй его значение непосредственно в запрос: "select *from [Лист1$] where (Завод = " & factory & ")"
|
|
|
|
|
Junior Member
      
участник
Last Login: 26.02.2007 17:21
Сообщ.: 15,
Visits: 31
|
|
 уже значение завода подставляеться,но в цикл все равно не заходит(:
|
|
|
|
|
Junior Member
      
участник
Last Login: 26.02.2007 17:21
Сообщ.: 15,
Visits: 31
|
|
| спасибо большое за помощь!заработало!!!!!!!!!!!!!!
|
|
|
|