none
VS2010 Пользовательские Функции RRS feed

  • Вопрос

  • В SQL-тексте запроса не работают (не опознаются) мои функции, кот. в других местах (например, я обхожу DATATABLE запись за записью и применяю эти функции к определенному  поля записи) работают! Как-то можно передать эти функции в запрос?
    • Перемещено Abolmasov Dmitry 3 августа 2011 г. 11:37 (От:Настольные ПК)
    9 июля 2011 г. 18:48

Ответы

Все ответы

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

    Не совсем понятен вопрос. О каких функциях идет речь? Какой язык программирования вы используете? И тп.. Вы можете более детально изложить проблему, так будет проще ее решить. Спасибо.


    Для связи [mail]
    11 июля 2011 г. 10:07
  • Я использую Visual Basic.Net, хотя и пойму, если пример на C#

    Функции разработаны мной, например:

    Public pubmaxkey As Long

    Public Function Pub(Mode As Integer) As Object
    Select Mode
    Case 1
        pubmaxkey = MaxKey("members", "id", "id > 0")
        Pub = pubmaxkey
        pubmaxkey = pubmaxkey + 1

    End Select
    End Function

    Maxkey-функция вычисления максимального индекса в данной колонке (id)  данной таблицы (members)

    а текст запроса выглядит примерно так:

    Dim sql As New OleDb.OleDbCommand

    sql.command="select name from members where id=pub(1)"

    (Это самый простой случай, есть функции довольно сложные)

     

     

    11 июля 2011 г. 16:28
  • Изыиняте, не sql.commandб  а sql.commandtext, текст выглядит так:

    sql.commandtext="select name from members where id=pub(1)"

    11 июля 2011 г. 16:31
  • Вы должны вызвать функцию, а не просто указать ее имя в запросе. SQL сервер же не знает что такое pub(1), где она объявлена и что с ней делать, да и доступ к программе вашей и ее коду у него нет.

    Вам нужно сделать конкатенацию строк из "select name from members where id=" и результата выполнения Pub(1). В vb.net это помоему делается с помощью &, но могу ошибаться.

    Такием образом в программе у вас должно быть:

    sql.commandtext="select name from members where id=" & Pub(1)
    

     


    Для связи [mail]
    12 июля 2011 г. 10:55
  • Я неверно выразился. Текст запроса такой

    sql.commandtext="select Myfuntion(name) from members "
    т.е. надо обработать все записи функцией

    Myfuntion

    причем если вместо Myfunction, скажем Left(name,6)- то работает.

    13 июля 2011 г. 19:28
  • Left работает потому, что данная функция есть в SQL Server.

    Вам же нужно выполнить запрос, который просто выберет все имена, а потом уже в коде на vb.net для каждого результата применить вашу функцию MyFunction.


    Для связи [mail]
    14 июля 2011 г. 5:22
  • Этот запрос является основанием для таблицы, а она-источником данных для DataGridView. Как в коде применить функцию MyFunction - обойти все записи?(Так я сейчас и делаю- но это медленно, ведь записей много, функция взята из Access, там она работала в тексте запроса и все было гораздо быстрее)
    14 июля 2011 г. 14:43
  • Тогда наверное имеет смысл создать хранимую процедуру и использовать ее для выборки данных из таблицы - CREATE PROCEDURE (Transact-SQL)


    Для связи [mail]
    • Помечено в качестве ответа Abolmasov Dmitry 22 июля 2011 г. 11:00
    17 июля 2011 г. 19:05