powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Синтаксис в строке select при вызове из VB
26 сообщений из 26, показаны все 2 страниц
Синтаксис в строке select при вызове из VB
    #36421626
Май
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите синтаксис в строке выбора для 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
Синтаксис в строке select при вызове из VB
    #36421636
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где текст программы? Где текст ошибки?
...
Рейтинг: 0 / 0
Синтаксис в строке select при вызове из VB
    #36421679
Май
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Синтаксис в строке select при вызове из VB
    #36421681
Май
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Май,

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

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

I Have Nine Lives You Have One Only
THINK!

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

I Have Nine Lives You Have One Only
THINK!

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

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

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

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

declare @KOL int, @VOL money
select @KOL=sum(колво), @VOL=sum(объем) from сделки where ...
...
Рейтинг: 0 / 0
Синтаксис в строке select при вызове из VB
    #36422435
Май
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Синтаксис в строке select при вызове из VB
    #36422465
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneя ещё раз говорю, у вас в батче нет именнованных параметров @KOL, @VAL и тд и тп
или объявляйте их до своего select:

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

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

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

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

Да в том то и дело. Я и спрашиваю что он понимает:) Ну не могу найти нигде примера в инете как написать этот запрос с параметром за исключением книги на которую я указал. Вот и поправьте меня как надо. Я пишу ведь запрос select ?= ... а не select @a=.
...
Рейтинг: 0 / 0
Синтаксис в строке select при вызове из VB
    #36422882
Фотография Medvich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Май, ты в качестве параметра, в перечень полей что хочешь подставлять? В параметризированных запросах параметры "принято" ставить в разделе 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
Синтаксис в строке select при вызове из VB
    #36422914
Фотография Medvich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Май, я не знаю как ты искал, но к моему удивлению в 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
Синтаксис в строке select при вызове из VB
    #36422923
Фотография Medvich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Синтаксис в строке select при вызове из VB
    #36422963
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: 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
Синтаксис в строке select при вызове из VB
    #36423515
Май
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MedvichМай, держи ссылку, не урони =)
Использование параметров в запросах и отчетах

Как ниже правильно написали, мне не нужны параметры в условии WHERE, точнее нужны, но с ними проблемы нет. Это входные параметры. Меня интересуют выходные параметры. Вот этого я и не могу найти для ACCESS.^(
...
Рейтинг: 0 / 0
Синтаксис в строке select при вызове из VB
    #36423520
Май
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь Горбонос
> Автор: 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
Синтаксис в строке select при вызове из VB
    #36423583
Май
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Закрываю тему.
Буду просто вместо параметров создавать строку запроса конкатенацией с переменными.
Вопрос конечно остался, но для дальнейшей работы над задачей не так важно.
...
Рейтинг: 0 / 0
Синтаксис в строке select при вызове из VB
    #36423584
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Май,

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

Программный интерфейс для собственной функции вы сделаете как вам нравится с песнями и плясками, а внутрь функции запихаете блэкджек и шлюх (с)
...
Рейтинг: 0 / 0
Синтаксис в строке select при вызове из VB
    #36423697
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Май
> Буду просто вместо параметров создавать строку запроса конкатенацией с переменными.

Не понял, как

> Вопрос конечно остался, но для дальнейшей работы над задачей не так важно.

В виду того, что я не нашел такого синтаксиса в Акцессе, я бы сделал так:
Код: 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.
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(колво) as KOL, sum(объем) as VOL  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 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===============================================

        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 = dr("Kol").Value ' Здесь я не знаю правильно синтаксиса. Посмотри сам
            Vol = dr("Vol").Value ' Здесь я не знаю правильно синтаксиса. Посмотри сам
        Catch e2 As Exception ' Ошибка чтения
            MsgBox(e2.Message)
            Return TR
        End Try


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


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