Конференция "Базы" » Stream and AdoCommand [D7, MSSQL]
 
  • sniknik © (28.07.08 10:53) [20]
    > В одном случае НД возвращается, а в другом - нет.
    в любом случае возвращается.
  • Viod © (28.07.08 11:00) [21]
    просто хочется всю безопасность со своего кода на sql переложить
  • Ega23 © (28.07.08 11:01) [22]

    > в любом случае возвращается.



    IF EXISTS(select .......)
      BEGIN
         SELECT ...........
         RETURN 0
      END
      ELSE RETURN -1



    Где тут НД возвращается, если not exists?
  • Viod © (28.07.08 11:03) [23]
    Ниче не вернет если нот ексистс проверено :)
  • Viod © (28.07.08 11:08) [24]
    sniknik, а че плохо чтоле? Получил 0 - работай, получил -1 не работай.
    А если тебе нужно по сложному алгоритму что-то из базы получать. Клиентская машина итак еле шевелится. Перекладываешь все на SQL'ник и все. Код в дельфи прилично выглядит: не приходится запросы писать, а они ведь бывают очень длинными. Да и потом хранимые процедуры и с представлениями могут работать.. Попробуй ка все в делфи впихнуть :)
    А проверки в хранимых процедурах... пустой набор записей когда возвращается - тоже вроде не очень приятно?
  • Viod © (28.07.08 11:08) [25]
    sniknik, а че плохо чтоле? Получил 0 - работай, получил -1 не работай.
    А если тебе нужно по сложному алгоритму что-то из базы получать. Клиентская машина итак еле шевелится. Перекладываешь все на SQL'ник и все. Код в дельфи прилично выглядит: не приходится запросы писать, а они ведь бывают очень длинными. Да и потом хранимые процедуры и с представлениями могут работать.. Попробуй ка все в делфи впихнуть :)
    А проверки в хранимых процедурах... пустой набор записей когда возвращается - тоже вроде не очень приятно?
  • sniknik © (28.07.08 11:10) [26]
    > Где тут НД возвращается, если not exists?
    AdoCommand.execute:_recordset;

    > Ниче не вернет если нот ексистс проверено :)
    тебе это просто не показывают... а на самом деле возвращается, без рекордсета оно не может, там кроме данных в структуре еще информационная инфа есть т.что. в любом случае. гарантированно.
  • sniknik © (28.07.08 11:13) [27]
    > sniknik, а че плохо чтоле? Получил 0 - работай, получил -1 не работай.
    то же самое от запроса. никакой выгоды... как минус разнесение логики на 2 места. (возможно именно это и нужно, но это как раз входит в оставшиеся 10% вместе со сложными процедурами. вряд ли твой случай)
  • Viod © (28.07.08 11:15) [28]
    Ну тут я не знаю.. Не специалист. Просто на деле получается исключение. Предлагаешь отключить integrated debugging и смотреть IsEmpty как ни в чем не бывало?
  • sniknik © (28.07.08 11:17) [29]
    > Просто на деле получается исключение.
    sniknik ©   (28.07.08 10:51) [19]
    > просто по пустому в твоем случае уже ADODataSet генерит исключение

    > AdoCommand.execute
  • Viod © (28.07.08 11:31) [30]
    sniknik, мы не поняли друг друга. На 2 проверки все разносится потому что я не могу использовать AdoCommand для выборки из базы blob поля. Если бы я это сделал - я бы использовал возвращаемые хранимой процедурой значения. А поскольку мне приходится использовать aDodataSet - получается что я сделал мартышкин труд. Когда я все это планировал - думал использовать только AdoCommand и только проверки внутри хранимой процедуры.
    Объясни лучше как получить значение Blob поля из выборки, исползуя  AdoCommand. Blob поле будет допустим в fields[0]
  • sniknik © (28.07.08 11:52) [31]
    > На 2 проверки все разносится потому что я не могу использовать AdoCommand для выборки из базы blob поля.
    тебе не предлагали использовать AdoCommand для blob, это было предложено уже для проверки, что и RETURN -1 вернет рекордсет.

    по твоей "проблеме" нормальное решение предложил Ega23 ©   (28.07.08 10:18) [15], проверка в одном месте.

    > Объясни лучше как получить значение Blob поля из выборки, исползуя  AdoCommand.
    это будет ненормальное решение... но раз так хочется, присвой результат execute рекордсету в ADODataSet и работай уже с ним (или посмотри как он это делает, и повтори... если желаешь еще больше мазохистских удовольствий.).
  • sniknik © (28.07.08 11:54) [32]
    > А поскольку мне приходится использовать aDodataSet - получается что я сделал мартышкин труд.
    именно им ты сейчас и занимаешься. нужно упрощать то, что делаешь а не усложнять.

    -----------------------------
    усложнять просто, упрощать сложно! © не помню чей
  • Viod © (28.07.08 12:03) [33]
    :) Сижу и не могу... Давай так: однозначный ответ на вопрос "можно вытащить из базы блоб поле и загрузить его в Stream используя AdoCommand, но не используя AdoDataSet"? Да или Нет? :)

    Я же говорю, чисто теоретически. Проблема уже решена благодаря Ega23, за что большое спасибо.

    Просто изначально планировалось, что с базой будет работать один единственный компонент AdoCommand. Вот я и мучаю себя и остальных, чтобы однозначно понять реально это или нет
  • Ega23 © (28.07.08 12:10) [34]

    > можно вытащить из базы блоб поле и загрузить его в Stream
    > используя AdoCommand, но не используя AdoDataSet


    Можно. Но не стОит.
  • Ega23 © (28.07.08 12:12) [35]

    > Просто изначально планировалось, что с базой будет работать
    > один единственный компонент AdoCommand.


    Это не самый лучший вариант. Есть такая вещь, как скомпилированные запросы (Prepared:=True); на такие лучше свой экземпляр TADODataSet или TADOCommand держать.
  • sniknik © (28.07.08 12:14) [36]
    > однозначный ответ на вопрос
    да. но показывать как не буду, ломает делать бессмысленную работу которая к тому же ухудшит программу если вдруг будет использовано.

    > что с базой будет работать один единственный компонент AdoCommand.
    а смысл? на компонентах экономить не стоит, раз уж чтото используется, то используется, хоть 1 раз встреченное хоть 128, на размере exe не скажется, проверь, добавь несколько пустышек (без запросов внутри, они то добавятся, а код нет. ООП однако.)
  • Viod © (28.07.08 12:32) [37]
    Не могу ниче понять. Может туплю...
    Вот t-sql:

    CREATE PROCEDURE s_select_vopros_by_id
     @id_vopros int=0
    AS
    SELECT * FROM new_test.dbo.t_vopros WHERE id_vopros=@id_vopros


    Вот Delphi:

    with data.ADODataSet1 do begin
       CommandText:='exec s_select_vopros_by_id @id_vopros=:id_vopros';
       Parameters.ParamByName('id_vopros').Direction:=pdInput;
       Parameters.ParamByName('id_vopros').Value:=number;
       Open;
       If not(IsEmpty) then
         Showmessage(FieldByName('id_vopros').value);
    end;


    Первый раз код делфи проходит с number: = 110 - все норм, второй раз с number:=112  - showmessage ВОЗВРАЩАЕТ 110.

    Как так?
  • Ega23 © (28.07.08 12:36) [38]

    >
    > Как так?


    А где Close?
  • Viod © (28.07.08 12:41) [39]
    Удалено модератором
 
Конференция "Базы" » Stream and AdoCommand [D7, MSSQL]
Есть новые Нет новых   [134473   +28][b:0][p:0.001]