Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TQuery (запрос с переменой), Запрос с переменной 
V
    Опции темы
Папараццы
Дата 11.2.2007, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 475
Регистрация: 18.9.2006
Где: Баку

Репутация: нет
Всего: нет



Вот решил перейти к обучению С++ Билдера...Сразу чем я заинтересовался это базы данных...Через ODBC очень легко получил доступ к MySQL (Намного легче чем MySQL++) крч всё супер было пока  я не остановился на запросах...Беру DataSource,Query,DbGrid и один Edit чтобы прозводить поиск...
Связал всё ...Потом стал  писать SQL запрос ...Точно так же как и в PHP 
Код

SELECT *  FROM sample WHERE id='value'
  
Где value присваиваю значение  EDIT ' а..
Ну как вы поняли нечего не происходит...При компиляции запрашивает пароль  на БД ..и пустая ГРИД даже в коде value = 1 пишу тоже нечего...
Как это надо производить ??
Зарание благодарен...
 
ПыСы : Стоитли учится с DEVELOPER 2006? там включён С++ кажется ...


--------------------
/*---------------------------------------------------------------------------------*/
PM MAIL WWW ICQ MSN   Вверх
Rodman
Дата 11.2.2007, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



Код

//DataSource + DBGrid + Query надеюсь уже соединены
Query->SQL->Clear;
Query->SQL->Add("SELECT *  FROM sample WHERE id=:Prm");
Query->ParamByName("Prm")->Value=Edit1->Text;
Query->Open;

PM MAIL WWW Skype GTalk YIM MSN   Вверх
Папараццы
Дата 11.2.2007, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 475
Регистрация: 18.9.2006
Где: Баку

Репутация: нет
Всего: нет



А эт потомучто VCL на Паскале написаны ?? Поэтому присваивание на Паскале ? Вроде понятно...


--------------------
/*---------------------------------------------------------------------------------*/
PM MAIL WWW ICQ MSN   Вверх
Anikmar
Дата 11.2.2007, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата(Папараццы @  11.2.2007,  16:36 Найти цитируемый пост)
Поэтому присваивание на Паскале ?

Это вы про что? Какое присванивание на Паскале?
Кстати о прведенном примере. Чтобы избежать недоразумений - лучше явно преобразовать параметр в целое (там ведь поле целочисленное?):

Query->ParamByName("Prm")->Value=Edit1->Text.ToInt();


PM MAIL ICQ   Вверх
Папараццы
Дата 11.2.2007, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 475
Регистрация: 18.9.2006
Где: Баку

Репутация: нет
Всего: нет



Спасибо  за совет...Ну преобразование в запросе идентичны также как и на Дельфи...А вот у меня есчё трабла есть такая по поводу вставки записи уже в таблицу парадокса
Код

void __fastcall TForm1::Button2Click(TObject *Sender)
{
 Query->SQL->Clear();
 Query->SQL->Add("INSERT INTO name.db('name','surname') VALUES prm1,prm2 ");
 Query->ParamByName("prm1")->Value=Memo1->Text;
 Query->ParamByName("prm2")->Value=Memo2->Text;
 Query->Open();
}

Заявляет что не нет такой переменной prm1 ?
Да и для каждого запроса обизательно ставить по одному Query? Можно ли взять один использовать для всех...И откуда можно взять фаг по SQL  для Paradox или он такой же как и в MySQL - e ???? 
Зарание благодарен...


--------------------
/*---------------------------------------------------------------------------------*/
PM MAIL WWW ICQ MSN   Вверх
Anikmar
Дата 11.2.2007, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Сталкивался с такой проблемой. 
Решил ее следующм образом:
После динамического создания текста запроса я делал следующую команду:
Код

Query->Parameters->ParseSQL(Query->SQL->Text,true);


PM MAIL ICQ   Вверх
Папараццы
Дата 11.2.2007, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 475
Регистрация: 18.9.2006
Где: Баку

Репутация: нет
Всего: нет



А что это значит ? 


--------------------
/*---------------------------------------------------------------------------------*/
PM MAIL WWW ICQ MSN   Вверх
Anikmar
Дата 11.2.2007, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Это заставляет компонент разобрать текст запроса и заполнить массив Parameters необходимыми значениями. Можно их заполнить самостоятельно. Этому гляку я удивился - в дезайн тайме парсится автоматом, но там видимо другая обработка. Когда запрос меняется в рунтайме компоненту видимо не хватает мозгов (разработчика), чтобы это засечь.
Так как большинство запросов я создавал в дизайн-тайме я не особо внимательно разбирался с таким глюком - просто нашел способ решения и на этом успокоился.

Кстати, встроенный хелп билдера соержит неправильный пример - если его тупо содрать, он выдает такую же ошибку.
PM MAIL ICQ   Вверх
Romikgy
Дата 11.2.2007, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 11
Всего: 146



Цитата(Rodman @  11.2.2007,  13:41 Найти цитируемый пост)
WHERE id=:Prm


Цитата(Папараццы @  11.2.2007,  18:22 Найти цитируемый пост)
VALUES prm1,prm2

имхо есть разница smile


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Anikmar
Дата 11.2.2007, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата(Romikgy @  11.2.2007,  23:25 Найти цитируемый пост)
имхо есть разница  

Не заметил, не внимательный. Но компонент реально глючит. Даже если двоеточия поставить.
По крайней мере у меня с этим были заморочки.

Добавлено @ 23:44 
Я просто проверил на таком коде (эта проблема давно возникала, поэтому просто кусочек накропал заново)
Код

    AQ_Test->Close();
    AQ_Test->SQL->Clear();
    AQ_Test->SQL->Add("SELECT * FROM TestTable WHERE Uni = :pUni");
    AQ_Test->Parameters->ParseSQL(AQ_Test->SQL->Text,true); 
    ShowMessage(AnsiString(AQ_Test->Parameters->Count));// Если предыдущей строки нет - выводит 0, с ней - все в порядке
    AQ_Test->Parameters->ParamByName("pUni")->Value = 1; // Тут ошибка если вручную не пропарсить текст запроса

PM MAIL ICQ   Вверх
Rodman
Дата 12.2.2007, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



Папараццы, 
Код

void __fastcall TForm1::Button2Click(TObject *Sender)
{
 Query->SQL->Clear();
 Query->SQL->Add("INSERT INTO name.db('name','surname') VALUES (:prm1,:prm2) ");
 Query->ParamByName("prm1")->Value=Memo1->Text;
 Query->ParamByName("prm2")->Value=Memo2->Text;
 Query->ExecSQL();
}

1. переда параметром должно стоять двоеточие..
2. скобки забыл...
3. для insert, delete, update лучше использовать ExecSQL
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Папараццы
Дата 12.2.2007, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 475
Регистрация: 18.9.2006
Где: Баку

Репутация: нет
Всего: нет



Ну вот я тоже это заметил...Понятно..Спасибо...


--------------------
/*---------------------------------------------------------------------------------*/
PM MAIL WWW ICQ MSN   Вверх
Rodman
Дата 12.2.2007, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



ну если все понятно, пометь топик - решенным!!!
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Папараццы
Дата 12.2.2007, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 475
Регистрация: 18.9.2006
Где: Баку

Репутация: нет
Всего: нет



Не решился то вопрос уже довно только по теме уже пошли вопросы....Пусть поживёт темка ,у меня будут вопросики..А без них не бывает..  smile 


--------------------
/*---------------------------------------------------------------------------------*/
PM MAIL WWW ICQ MSN   Вверх
fliengster
Дата 2.5.2009, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 7.6.2008

Репутация: нет
Всего: нет



Есть такая беда, как тогда сделать запрос с фильтрьванием типа если ты будешь вводить в Edit1->Text = "Art's";
то происходит проблема с запросом, если в запросе было введено такое..

AnsiString Name = Edit1->Text;
ADOQuery3->SQL->Add("select Table1.id,Table1.Name from Table1,Table2 where Name_Recipe = '"+Name+"'; ");
ADOQuery3->Active = true;

происходит что когда просматривается запрос получается в переменной Name встречается символ ' ....
Как мне его отфильтровать ... или каждый раз делать парсин строки ... для обнаружения этого символа и заменять на что-то другое?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0582 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.