Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Insert INTO в ADOQuery


Автор: ColdDeath 31.10.2009, 17:24
Имеется следующий код:
Код
            UserID="Vasya";
            Pass="123";
            int Level=2;
            MainForm->ADOConnectionMain->ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + MainDBPath + ";Jet OLEDB:Database Password=dfdfk3j343";
            MainForm->ADOQueryMain->Active = false;
            MainForm->ADOQueryMain->SQL->Clear();

            MainForm->ADOQueryMain->SQL->Add("\
                    INSERT INTO Initial(UserID, Pass, Level) VALUES( \
                            '" + UserID + "', \
                            '" + Pass + "', \
                            " + Level + "\
                    )"
            );
            MainForm->ADOQueryMain->ExecSQL();
            MainForm->ADOConnectionMain->Close();

При компиляции ругается что синтаксическая ошибка в запросе INTO.
Код вставляет в таблицу Initial базы данных Строку с полями UserID (текст), Pass (текст), Level (числовой).
Проблема во вставке Level. Если Level сделать AnsiString'ом, и изменить тип поля в БД на текстовый, то нормально работает. Но мне нужно именно число. В чём ошибка в запросе? Запрос генерирует строку:
INSERT INTO Initial(UserID, Pass, Level) VALUES('Vasya', '123', 2)
В чём ошибка? Помогите, пожалуйста.


Модератор: на забываем пользоваться кнопочкой "Код".

Автор: Anikmar 31.10.2009, 20:32
Цитата(ColdDeath @  31.10.2009,  17:24 Найти цитируемый пост)
При компиляции ругается что синтаксическая ошибка в запросе INTO.

Точно при компиляции? Покажите сообщение об ошибке.

Автор: Данкинг 31.10.2009, 20:41
Так правильно: переменная Level у тебя числовая, а ты её пытаешься вставить в строку (SQL->Add). Причём наряду с переменными UserID и Pass, которые как раз текстовые.

Добавлено через 1 минуту и 58 секунд
Цитата(ColdDeath @  31.10.2009,  17:24 Найти цитируемый пост)
Запрос генерирует строку:

Как генерирует: программа вообще компилироваться не должна. smile 

Автор: Anikmar 31.10.2009, 20:47
Цитата(Данкинг @  31.10.2009,  20:41 Найти цитируемый пост)
Как генерирует: программа вообще компилироваться не должна.   

 Вполне может, если компилятор типа Билдера - то там может, у AnsiString куча всевозможных конструкторов, только вот за ними следить надо, однако...

Автор: Данкинг 31.10.2009, 21:40
Цитата(Anikmar @  31.10.2009,  20:47 Найти цитируемый пост)
Вполне может, если компилятор типа Билдера - то там может, у AnsiString куча всевозможных конструкторов, только вот за ними следить надо, однако... 

Тогда понятно, остаётся просто взять IntToStr(Level). smile 

Автор: ColdDeath 6.11.2009, 17:01
Компилятор - Билдер. Всем спасибо за посты, но проблема оказалась в следующем:

Код
  MainForm->ADOQueryMain->SQL->Add("\
                    INSERT INTO Initial(UserID, Pass, Level) VALUES( \
                            '" + UserID + "', \
                            '" + Pass + "', \
                            " + Level + "\
                    )"
            );



А надо было с кавычками такими ещё писать (`), вот так:
Код
  MainForm->ADOQueryMain->SQL->Add("\
                    INSERT INTO `Initial` (`UserID`, `Pass`, `Level`) VALUES( \
                            '" + UserID + "', \
                            '" + Pass + "', \
                            " + Level + "\
                    )"
            );


Всеравно всем спасибо! Тема ЗАКРЫТА!

Автор: A5uKa 7.11.2009, 10:14
Добавлю ещё мелочь
делая Add, ещё не нужно забывать про Clear() перед этим, так можно использовать ->Text=
Потом обычно используют не ' ' , а [ ] для полей, вот так

Код

" INSERT INTO [Твой сервер (как и dbo - это не обязательно, т.к. есть в ADOConnect)].[dbo].[Initial]  \
                         ([UserID]                                 \
                         ,[Pass]                                     \
                         ,[Level]                                    \ 
                VALUES                                             \
                        ('" + UserID + "'                \
                         ,'" + Pass + "'                   \
                         ," + String(Level) ;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)