Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Синтаксис в строке select при вызове из VB / 25 сообщений из 26, страница 1 из 2
20.01.2010, 22:39
    #36421626
Май
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис в строке select при вызове из VB
Подскажите синтаксис в строке выбора для OLEDB.
select ?=sum(a1), ?=sum(a2) from Tab where a3 = ?

Соединение открывается правильно к источнику.
a1 и a2 числовые поля, есть в таблице Tab записи
Первые два параметра назначаю направление output последний input.
Добавляю параметры в правильной последовательности, ошибок нет.

Выполняю запрос dr=ExecuteReader и получаю ошибку, ловлю в Catch что проблемы с параметром.
Где то в синтаксисе ошибка? Я привык к MS SQL там было бы @a1 = sum(a1) и т.д.
Таблица в ACCESS, потому и исползую OLEDB.
...
Рейтинг: 0 / 0
20.01.2010, 22:48
    #36421636
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис в строке select при вызове из VB
Где текст программы? Где текст ошибки?
...
Рейтинг: 0 / 0
20.01.2010, 23:33
    #36421679
Май
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис в строке select при вызове из VB
Shocker.ProГде текст программы? Где текст ошибки?

Текст программы ниже.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
Function GetData_TRIO(ByVal Par As ParIndTRIO, ByVal d As Date, ByVal Seccode As String) As Ind_TRIO
        Dim TR As Ind_TRIO
        Dim Vol As Double
        Dim Kol As Double
        Dim lcn As New OleDb.OleDbConnection(ConnStringInfo)
        Dim qstr As String = "select ?=sum(колво), ?=sum(объем)  from сделки where код_бумаги = ? "
        Dim str As String = " and DATEDIFF(""s"", время, ?) <= "
        Dim str_buy As String = " and операция = 'Покупка' and DATEDIFF(""s"", время, ?) <= "
        Dim str_sell As String = " and операция = 'Продажа' and DATEDIFF(""s"", время, ?) <= "

        Dim cmd As New OleDb.OleDbCommand(qstr, lcn)

        Dim pD As New OleDb.OleDbParameter

        Dim pSec As New OleDb.OleDbParameter
        Dim pT As New OleDb.OleDbParameter


        Dim pVol As New OleDb.OleDbParameter
        Dim pKol As New OleDb.OleDbParameter

        Dim dr As OleDb.OleDbDataReader




        REM===========================================================================
        REM Проверка открытости соединения
        REM===========================================================================
        Try

            If lcn.State = ConnectionState.Closed Then
                lcn.Open()
            End If
        Catch e1 As Exception ' Ошибка открытия соединения
            MsgBox(e1.Message)
        End Try

        REM===============================================
        REM Формируем параметры запроса
        REM===============================================
        pKol.ParameterName = "@KOL"
        pKol.DbType = DbType.Int32
        pKol.Direction = ParameterDirection.Output
        cmd.Parameters.Add(pKol)

        pVol.ParameterName = "@VOL"
        pVol.DbType = DbType.Double
        pVol.Direction = ParameterDirection.Output
        cmd.Parameters.Add(pVol)

        pSec.ParameterName = "@SEC"
        pSec.DbType = DbType.String
        pSec.Direction = ParameterDirection.Input
        pSec.Value = Seccode
        cmd.Parameters.Add(pSec)


        pD.ParameterName = "@D"
        pD.DbType = DbType.Date
        pD.Direction = ParameterDirection.Input
        pD.Value = d
        cmd.Parameters.Add(pD)

        pT.ParameterName = "@P"
        pT.DbType = DbType.Double
        pT.Direction = ParameterDirection.Input
        pT.Value = Par.T_Long
        cmd.Parameters.Add(pT)


        cmd.CommandType = CommandType.Text
        cmd.CommandText = qstr & str & "?"

        Try
            dr = cmd.ExecuteReader()
            Kol = pKol.Value
            Vol = pVol.Value
        Catch e2 As Exception ' Ошибка чтения
            MsgBox(e2.Message)
            Return TR
        End Try

 . . .
...
Рейтинг: 0 / 0
20.01.2010, 23:34
    #36421681
Май
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис в строке select при вызове из VB
Май,

e2.Message = "System.Data.OleDb.OleDbDataAdapter internal error: invalid parameter accessor: 1 BADBINDINFO."
...
Рейтинг: 0 / 0
21.01.2010, 08:53
    #36421919
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис в строке select при вызове из VB
такое ощущение, что параметры надо объявлять без символа "@"

I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
21.01.2010, 09:03
    #36421927
Май
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис в строке select при вызове из VB
HandKotтакое ощущение, что параметры надо объявлять без символа "@"

I Have Nine Lives You Have One Only
THINK!

Мне точно надо знать, у моего компа нет ощущений, он неодушевленный:)
В одном найденном примере в книге по программированию, где были только входные параметры, параметры объявлялись с @
...
Рейтинг: 0 / 0
21.01.2010, 09:13
    #36421938
Май
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис в строке select при вызове из VB
HandKotтакое ощущение, что параметры надо объявлять без символа "@"

I Have Nine Lives You Have One Only
THINK!

Убрал знаки @, получил вообще сообщение чтобы я получше смотрел что пишу:)
...
Рейтинг: 0 / 0
21.01.2010, 09:29
    #36421967
Май
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис в строке select при вызове из VB
Может кто книжку, фрагмент из книжки с примером подскажет как правильно написать.
...
Рейтинг: 0 / 0
21.01.2010, 10:05
    #36422020
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис в строке select при вызове из VB
.....у меня сложилось такое впечатление, что вам либо в ветку VB.NET, либо даже ADO.NET - может там быстрее подскажут.
...
Рейтинг: 0 / 0
21.01.2010, 10:21
    #36422057
Май
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис в строке select при вызове из VB
Shocker.Pro,

Да я то как раз хотел использовать старый механизм доступа, как VB6.
Чтобы использовать простой data reader.
...
Рейтинг: 0 / 0
21.01.2010, 10:26
    #36422070
Май
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис в строке select при вызове из VB
Shocker.Pro,

Создал тему и там. Может действительно там быстрее ответят.
...
Рейтинг: 0 / 0
21.01.2010, 11:19
    #36422230
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис в строке select при вызове из VB
обращайтесь к параметру по его порядковому номеру (у вас они не именованные)
...
Рейтинг: 0 / 0
21.01.2010, 12:08
    #36422385
Май
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис в строке select при вызове из VB
Konst_Oneобращайтесь к параметру по его порядковому номеру (у вас они не именованные)

пробовал. Ошибка вылетает на команде
dr = cmd.ExecuteReader()
а не на присвоении к переменной параметра.
Где то делаю ошибку при добавлении параметра или в строке запроса ошибка. Надеялся что посторонний взгляд обнаружит мою ошибку.
...
Рейтинг: 0 / 0
21.01.2010, 12:14
    #36422408
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис в строке select при вызове из VB
я ещё раз говорю, у вас в батче нет именнованных параметров @KOL, @VAL и тд и тп
или объявляйте их до своего select:

declare @KOL int, @VOL money
select @KOL=sum(колво), @VOL=sum(объем) from сделки where ...
...
Рейтинг: 0 / 0
21.01.2010, 12:23
    #36422435
Май
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис в строке select при вызове из VB
Konst_Oneя ещё раз говорю, у вас в батче нет именнованных параметров @KOL, @VAL и тд и тп
или объявляйте их до своего select:

declare @KOL int, @VOL money
select @KOL=sum(колво), @VOL=sum(объем) from сделки where ...

Я в качестве справки использую книгу Visual Basic.NET Библия пользователя.(стр. 416-417 Часть IV Технология Data Access)
В ней написано что для SQLClient, SQLCommand можно использовать именованные параметры.
Но для OleDB именованные параметры не используются, вместо них - ? . И порядок добавления парамеротров для OleDB важен. Порядок я выполнил, проверил много раз.

На SQLClient я достаточно много уже написал для доступа к SQL2005. Но вот старый добрый Access меня подкосил:)
...
Рейтинг: 0 / 0
21.01.2010, 12:30
    #36422465
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис в строке select при вызове из VB
Konst_Oneя ещё раз говорю, у вас в батче нет именнованных параметров @KOL, @VAL и тд и тп
или объявляйте их до своего select:

declare @KOL int, @VOL money
select @KOL=sum(колво), @VOL=sum(объем) from сделки where ...

А что, Аксесс такое понимает?
...
Рейтинг: 0 / 0
21.01.2010, 12:48
    #36422534
Май
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис в строке select при вызове из VB
Shocker.ProKonst_Oneя ещё раз говорю, у вас в батче нет именнованных параметров @KOL, @VAL и тд и тп
или объявляйте их до своего select:

declare @KOL int, @VOL money
select @KOL=sum(колво), @VOL=sum(объем) from сделки where ...

А что, Аксесс такое понимает?

Да в том то и дело. Я и спрашиваю что он понимает:) Ну не могу найти нигде примера в инете как написать этот запрос с параметром за исключением книги на которую я указал. Вот и поправьте меня как надо. Я пишу ведь запрос select ?= ... а не select @a=.
...
Рейтинг: 0 / 0
21.01.2010, 14:17
    #36422882
Medvich
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис в строке select при вызове из VB
Май, ты в качестве параметра, в перечень полей что хочешь подставлять? В параметризированных запросах параметры "принято" ставить в разделе WHERE, т.е. твой запрос
Код: plaintext
select ?=sum(a1), ?=sum(a2) from Tab where a3 = ?
просто неправильно написан.


IMHO параметризованный запрос должен выглядеть как-то так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT
  sum(a1) sum_a1,
  sum(a2) sum_a2 
FROM
  Tab T
WHERE
   T.a3 = ? 
   and T.sum_a1=? 
   and T.sum_a2=?
-----
Матчасть - наше все!
...
Рейтинг: 0 / 0
21.01.2010, 14:25
    #36422914
Medvich
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис в строке select при вызове из VB
Май, я не знаю как ты искал, но к моему удивлению в MS Access 2007 есть такая штука, называется HELP , набираешь там "Использование параметров в запросах и отчетах" и читаешь.
Соостветственно запрос приобретает вид
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SELECT
  sum(a1) sum_a1,
  sum(a2) sum_a2 
FROM
  Tab T
WHERE
   T.a3 = @Param1 
   and T.sum_a1=@Param2 
   and T.sum_a2=@Param3

Или тебе твой код переписать?
...
Рейтинг: 0 / 0
21.01.2010, 14:28
    #36422923
Medvich
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис в строке select при вызове из VB
...
Рейтинг: 0 / 0
21.01.2010, 14:37
    #36422963
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис в строке select при вызове из VB
> Автор: Medvich

Автору нужны параметры не в where , а в части перечисления столбцов после select'а. MS SQL позволяет писать
запросы вида:
Код: plaintext
1.
Declare @sum_rows INT
Select @sum_rows = count(*) From table1
После выполнения такого запроса в переменной sum_rows будет количество
строк в таблице1. Автор хочет использовать такую возможность и в Акцессе. Но я не знаю есть ли там такой функционал или
это решается другими приемами.
Например я бы попробовал сделать такой запрос:
Код: plaintext
Select count(*) as sum_rows From table1
а после выполнения
получал-бы результат уже из вернувшегося рекордсета.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
21.01.2010, 17:18
    #36423515
Май
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис в строке select при вызове из VB
MedvichМай, держи ссылку, не урони =)
Использование параметров в запросах и отчетах

Как ниже правильно написали, мне не нужны параметры в условии WHERE, точнее нужны, но с ними проблемы нет. Это входные параметры. Меня интересуют выходные параметры. Вот этого я и не могу найти для ACCESS.^(
...
Рейтинг: 0 / 0
21.01.2010, 17:20
    #36423520
Май
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис в строке select при вызове из VB
Игорь Горбонос
> Автор: Medvich

Автору нужны параметры не в where , а в части перечисления столбцов после select'а. MS SQL позволяет писать
запросы вида:
Код: plaintext
1.
Declare @sum_rows INT
Select @sum_rows = count(*) From table1
После выполнения такого запроса в переменной sum_rows будет количество
строк в таблице1. Автор хочет использовать такую возможность и в Акцессе. Но я не знаю есть ли там такой функционал или
это решается другими приемами.
Например я бы попробовал сделать такой запрос:
Код: plaintext
Select count(*) as sum_rows From table1
а после выполнения
получал-бы результат уже из вернувшегося рекордсета.



Именно это мне и нужно и не могу найти синтаксиса для выходных параметров. Но они существуют, т.е. есть выходные параметры. Или синтаксис ACCESS не предусматривает выходных параметров?
...
Рейтинг: 0 / 0
21.01.2010, 17:41
    #36423583
Май
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис в строке select при вызове из VB
Закрываю тему.
Буду просто вместо параметров создавать строку запроса конкатенацией с переменными.
Вопрос конечно остался, но для дальнейшей работы над задачей не так важно.
...
Рейтинг: 0 / 0
21.01.2010, 17:41
    #36423584
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис в строке select при вызове из VB
Май,

Предлагаю вам не париться, а написать собственную функцию вызова запроса с параметрами, которая внутри будет
а) Форматировать и расставлять параметры в строке запроса вместо знаков вопросика (или как вам заблагорассудится)
б) Получать результат в рекордсет и раскидывать этот результат по выходным параметрам и возвращать это наружу.

Программный интерфейс для собственной функции вы сделаете как вам нравится с песнями и плясками, а внутрь функции запихаете блэкджек и шлюх (с)
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Синтаксис в строке select при вызове из VB / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]