Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / В чем причина, почему не работает параметр? / 5 сообщений из 5, страница 1 из 1
08.09.2004, 11:10
    #32684806
MySQLdb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем причина, почему не работает параметр?
Пишу клиента Builder6->ADO->MS Access XP

из файла тяну параметризованный запро вида

Код: plaintext
SQL_# 2 =SELECT  *  FROM  TBL_PERSONA  WHERE SUBDIV_ID = :pSUBDIV_ID   ORDER BY PERSON_FIO ASC

создаю параметр pSUBDIV_ID, ему присваиваю 1,
выполняю запрос, получаю рекодсет с количеством строк ==0 !

вот кусок кода, и что ме показывает билдер после препарирования запроса


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
                                       //Наполняем раздел персонала 
                                       //Делаем проверку типа БД для извлечения необходимого запроса 
                                       //Необходимо добавить в каждое подразделение списки 
                                       //персонала и обучаемых 
                                       //Для начала выбираем список персанала подразделения 
                                       //Для этого необходимо прочитать запрос SQL_#2 из секции в соответствии с типом базы данных 
                                      if (DBType=="MicroSoft Access 95,97,2000,2002(Xp),2003")
                                        { //0010 

                                            //Необходимо прочитать запрос SQL_#2 из секции [SQL  MicroSoft Access 95,97,2000,2002(Xp),2003] 
                                           SQL = locAdminIni->ReadString("SQL  MicroSoft Access 95,97,2000,2002(Xp),2003","SQL_#2","SQL_#1ReadError");
                                           if (SQL == "SQL_#1ReadError")
                                             { //00011 

                                                Application->MessageBox("Запрос для чтения персонала подразделения не определен!", "Ошибка чтения запроса!", MB_OK);
                                                return;

                                             }; //00011 

                                         } //0010 

                                          //Запрос извлечен, но он содержит параметр по полю  SUBDIV_ID ---> pSUBDIV_ID 
                                          //Необходимо создать парамет pSUBDIV_ID, и установить его в nSUBDIV_ID!!! 
                                         ParamValue = LocnSUBDIV_ID;
                                         locADOQuery->Parameters->CreateParameter("pSUBDIV_ID",ftLargeint,pdUnknown,sizeof(long),ParamValue);

                                          //Параметр создан, подготавливаемся к выборке данных 
                                         locADOQuery->Close();
                                         locADOQuery->SQL->Clear();
                                         locADOQuery->SQL->Add(SQL);
                                         locADOQuery->Prepared = true;
                                         SQL = locADOQuery->Parameters->ParseSQL(SQL,true);


                                          try
                                             { //0012try 

                                                //Screen->Cursor = crSQLWait; 
                                               locADOQuery->Open();

                                              } //0012try 
                                               catch (Exception &exception)
                                                    { //0012_1 

                                                        //Application->ShowException(&exception); 
                                                       Screen->Cursor = crDefault;
                                                       GetAdoConnectionError( locADOConnection );
                                                        //delete AdminIni; 
                                                       return;

                                                     } //0012_1 

                        //Данные извлечены 
                        //Начинаем заполнение 
                       RecCount = locADOQuery->RecordCount; //Извлекаем количество полученных записей 
                        //pItems =  locAdminTreeView->Items;//Получаем список узлов 
                        //pItem  =  pItems->GetFirstNode();//Указатель на корень 
                        //pItemRoot =  pItem;//корень 

                        //Заполняем от корня данными типа TBL_PERSONA 
                       if(locADOQuery->Active)
                         { //007 

                            locADOQuery->First(); //Остановились на первой записи RecordSet 
                            for(int counter= 1 ;counter <= RecCount;counter++)
                               {// 0071 


RecCount == 0 !!!


-----------------------------------------------------------
С уважением,MySQLdb
...
Рейтинг: 0 / 0
08.09.2004, 11:12
    #32684815
MySQLdb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем причина, почему не работает параметр?
Код: plaintext
1.
2.
ParamValue = LocnSUBDIV_ID;
где OleVariant ParamValue   
long  LocnSUBDIV_ID = 1 ;
-----------------------------------------------------------
С уважением,MySQLdb
...
Рейтинг: 0 / 0
08.09.2004, 12:06
    #32684985
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем причина, почему не работает параметр?
Странно...
но попробуй так .
не создавай параметры в ручную :)
так как он сам их создает , ну насколько я знаю у меня так и есть
Код: plaintext
1.
2.
3.
4.
5.
6.
   locADOQuery->Close();
   locADOQuery->SQL->Clear();
   locADOQuery->SQL->Add(SQL);
   locADOQuery->Prepared = true;
   locADOQuery->ParamCheck  = true;
   SQL = locADOQuery->Parameters->ParseSQL(SQL,true);

так как я сейчас еще проверил у меня вот так все работает отлично

Код: plaintext
1.
2.
3.
4.
5.
6.
   ADOQuery1->Close();
   ADOQuery1->SQL->Clear();
   ADOQuery1->SQL->Add("select * from cl_table_z where deleted = :del_key");
   ADOQuery1->Parameters->Items[ 0 ]->Value =  1 ;
   ADOQuery1->Open();


выбрались данные из таблицы cl_table_z только те если deleted = 1


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
08.09.2004, 13:43
    #32685302
MySQLdb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем причина, почему не работает параметр?
все получилось, вот как я сделал

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
                                          //Параметр создан, подготавливаемся к выборке данных 
                                         locADOQuery->Close();
                                         locADOQuery->SQL->Clear();
                                         locADOQuery->SQL->Add(SQL);
                                         locADOQuery->Prepared = true;
                                         locADOQuery->ParamCheck = true;
                                          //SQL = locADOQuery->Parameters->ParseSQL(SQL,false); 


                                          //Запрос извлечен, но он содержит параметр по полю  SUBDIV_ID ---> pSUBDIV_ID 
                                          //Необходимо создать парамет pSUBDIV_ID, и установить его в nSUBDIV_ID!!! 
                                          //ParamValue = LocnSUBDIV_ID; 
                                          //locADOQuery->Parameters->CreateParameter("pSUBDIV_ID",ftLargeint,pdUnknown,sizeof(long),ParamValue.VInteger); 
                                         locADOQuery->Parameters->ParamByName("pSUBDIV_ID")->Value = LocnSUBDIV_ID;
                                          //locADOQuery->Parameters->Add(); 
                                         //SQL = locADOQuery->Parameters->ParseSQL(SQL,true);

-----------------------------------------------------------
С уважением,MySQLdb
...
Рейтинг: 0 / 0
08.09.2004, 13:54
    #32685330
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем причина, почему не работает параметр?
ну да можно и так .

 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / В чем причина, почему не работает параметр? / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]