Конференция "Базы" » MySQL и несколько insert-ов [D7, MySQL]
 
  • Раиса © (15.02.10 15:14) [0]
    В программе пишу так (использую ADOQuery):
    START TRANSACTION; insert into table1 ......; insert into table2 ...;  COMMIT;


    Выдается синтаксическая ошибка. Если текст запроса сохраняю в файле, а затем его выполняю через SQLyog (например), то всё записывается в таблицы.
    Помогите, пожалуйста, найти ошибку.
  • Виталий Панасенко(дом) (15.02.10 15:16) [1]
    да просто это скрипт, я так понимаю... SQLyog это чудо умеет их выполнять, а компоненты АДО - нет.. только одну команду.. я так думаю
  • 12 © (15.02.10 15:18) [2]
    а так если?

     ADOConnection1.BeginTrans;
     ADOQuery1.ExecSQL;
     ..
     ADOQuery1.ExecSQL;
     ADOConnection1.CommitTrans;
  • Раиса © (15.02.10 15:37) [3]
    Спасибо за ответы.

    > 12 ©   (15.02.10 15:18) [2]

    Вроде бы нормально.
  • Ega23 © (15.02.10 15:41) [4]
    Совет: убери TADOQuery, используй для данной операции TADOCommand
  • 12 © (15.02.10 15:48) [5]

    > используй для данной операции TADOCommand

    +1
  • Раиса © (15.02.10 16:31) [6]

    > Ega23 ©   (15.02.10 15:41) [4]


    > 12 ©   (15.02.10 15:48) [5]

    А с помощью TADOCommand  можно будет весь запрос через ; написать?
  • Ega23 © (15.02.10 16:34) [7]

    > А с помощью TADOCommand  можно будет весь запрос через ;
    >  написать?


    Нет, должна быть атомарность команд.
    Речь о том, что TADOQuery это гибрид TADOCommand и TADODataSet в одном флаконе. Со всеми достоинствами, но также и со всеми недостатками. Введён исключительно ради совместимости со старыми BDE-шными проектами.
  • 12 © (15.02.10 16:38) [8]
    чего еще добавить :)
    +1

    старый фидошный анекдот:
    Народ, пошли пиво пить?
    +1
    +1
    ..
    +1
  • sniknik © (15.02.10 20:18) [9]
    > А с помощью TADOCommand  можно будет весь запрос через ; написать?
    а зачем тут? у mysql в одном инсерте позволительна массовая вставка. вроде бы...
    вот был бы у тебя mssql тогда можно было бы (но и там не нужно бы).

    > Со всеми достоинствами
    ??? это какими?
    недостатки видел, достоинств ни одного...
  • sniknik © (15.02.10 20:19) [10]
    а понял, у тебя 2 таблицы... не обратил внимания.
  • Раиса © (16.02.10 09:07) [11]
    > 12 ©   (15.02.10 15:18) [2]
    Воспользовалась этим советом. Вроде бы откатывается транзакция в случае ошибок.
    А так хотелось весь запрос через ;  написать как в MS SQL, но пришлось писать:
    ADOQuery1.ExecSQL;
    ..
    ADOQuery1.ExecSQL;
  • 12 © (16.02.10 10:11) [12]

    > откатывается транзакция

    куда ж она денется, когда разденется


    > хотелось весь запрос через ;  написать

    там программа (SQLyog? или как там)наверняка распарсивает строку, и делеает так же,
    begintran
    ExecSQL
    ExecSQL
    committran


    > > Со всеми достоинствами
    > ??? это какими?
    > недостатки видел, достоинств ни одного...

    это какие?
  • Ega23 © (16.02.10 10:22) [13]

    > Со всеми достоинствами
    > ??? это какими?
    > недостатки видел, достоинств ни одного...


    А достоинство только одно - поддержка старых BDE-шных проектов.
  • sniknik © (16.02.10 11:33) [14]
    > поддержка старых BDE-шных проектов.
    имхо, но это тоже недостаток, т.к. он не поддерживает, а только "делает вид". чем делать криво, уж лучше бы не делал ничего... и тогда бы армия "начинающих", но знакомых почему то с BDE программистов, вынуждена была бы учится, а не просто тупо заменять компоненты. (не было бы возможности такого самообмана, типа "взял новое, значит работаю по новому". а на самом деле по старой логике, и с исковерканным пониманием)

    а когда знаешь, то заменить одно на другое нет проблем пусть даже TTable на TADODataSet (и даже также криво но быстро как с этими поддержками BDE, но тут хоть с полным осознанием кривизны. а можно чуток подольше но нормально).
  • Ega23 © (16.02.10 11:37) [15]
    Коль, давай не будем холивара начинать? Тем более, что я не фанат TADOQuery, как ты заметил... :)
 
Конференция "Базы" » MySQL и несколько insert-ов [D7, MySQL]
Есть новые Нет новых   [134435   +33][b:0][p:0.001]