Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.06.17;
Скачать: [xml.tar.bz2];

Вниз

SQL-запрос на BDE API   Найти похожие ветки 

 
Dmitry_177   (2007-03-26 19:43) [0]

делаю SQL-запрос на BDE API..

var
 szQuery: string;
 i: integer;
 iRecCount: Integer;
 hCursor: hDBICur;
 Props: CURProps;
 pRecBuf: PChar;
...

szQuery := "SELECT Name FROM Table.DB";  // считать все имена из таблицы
if DbiQExecDirect(hDB, qrylangSQL, PChar(szQuery), @hCursor) = DBIERR_NONE then
 begin
   DbiGetExactRecordCount(hCursor, iRecCount);
   for i := 0 to iRecCount - 1 do
     begin
       DbiGetCursorProps(hCursor, Props);
       GetMem(pRecBuf, Props.iRecBufSize * SizeOf(BYTE));

       DbiGetNextRecord(hCursor, dbiNOLOCK, pRecBuf, nil);
       MessageBox(0, pRecBuf, "Test", 0);    // к примеру выводить MessageBox-ом..
     end;
 end;


Вот с именами так работает.. Но если переделать запрос на такой:

szQuery := "SELECT * FROM Table.DB WHERE Name="...."";

Вобщем считать все данные по какому-то имени, то так уже не считывает..=((
полей там около 20, но в переменная iRecCount почему-то равна 1-му.. думаю ладно, поставил в цикле нужное число, сколько полей есть на самом деле, выдает почему-то постоянно одно и тоже, только имя.. Пробовал в запросе вместо звездочки, перечислить все поля, тоже самое..

Помогите пожалуйста..


 
Dmitry_177   (2007-03-26 21:38) [1]

Может это из-за того что поле Name из условия какраз и входит в состав всех полей которые мне нужно считать?

Т.е. szQuery := "SELECT Name, Address, Telephone FROM Table.DB WHERE Name="...""; так можно делать? Я пробовал и убрать Name, т.е. сделал так: szQuery := "SELECT Address, Telephone FROM Table.DB WHERE Name="...""; всеравно не работает...:(


 
Sergey13 ©   (2007-03-27 08:41) [2]

Я не знаток АПИ, но думаю причина в том, что в первом запросе возвращается много записей с одним полем, а в остальных вариантах возвращается одна запись с многими полями. Чувствуешь разницу?


 
Dmitry_177   (2007-03-27 09:08) [3]

так MessageBox это отобразил бы.. а нет..


 
ЮЮ ©   (2007-03-27 09:27) [4]

Интересно, какого размера ехешник надеешься получить, если  270K от использования DBTables тебя так напрягают.

З.Ы. Чтобы использлвать BDE API неплохо бы и BDE установить, дистрибутив которого значительно больше 270K


 
Dmitry_177   (2007-03-27 10:03) [5]

мне просто надо на BDE API...


 
sniknik ©   (2007-03-27 10:49) [6]

> мне просто надо на BDE API...
а, извиняюсь, ты без API можеш? на стандартных компонентах. потому как, раз уж хочеш их заменить то должен повторить сам в них реализованный функционал и значит знать их в совершенстве... и работу с ними и как устроены. а вопросы задаешь...

p.s. все это уже сделано, просто смотри исходники тех самых "всовершенствезнаемых" компонент.


 
Dmitry_177   (2007-03-27 10:57) [7]

Смотрел.. Я уже практически все сделал.. Осталось только это..


 
sniknik ©   (2007-03-27 11:11) [8]

> Смотрел.. Я уже практически все сделал.. Осталось только это..
ага, верю. именно поэтому у тебя вопрос практически не отличается от того чем закончили неделю назад... того же уровня.

еще смотри, пока не увидишь как там сделано выделение поля из записи, буфер то (судя по названию) возвращается на запись...


 
Dmitry_177   (2007-03-27 12:28) [9]

Сделал я так:

var
hCursor: hDBICur;
pFlds: pFLDDesc;
Blank: LongBool;
pRecBuf: PChar;
FieldString: String;
Props: CURProps;
i: integer;

...

DbiGetCursorProps(hCursor, Props);
GetMem(pRecBuf, Props.iRecBufSize * SizeOf(BYTE));
GetMem(pFlds, Props.iFields * sizeof(FLDDesc));

DbiGetFieldDescs(hCursor, pFlds);
DbiGetNextRecord(hCursor, dbiNOLOCK, pRecBuf, nil);

SetLength(FieldString, pFlds.iUnits1 + 1);
for i := 1 to Props.iFields do
 begin
   pFlds^.iFldNum := i;

   if pFlds.iFldType = fldZSTRING then
     begin
       DbiGetField(hCursor, i, pRecBuf, pBYTE(PChar(FieldString)), Blank);
       MessageBox(0, PChar(FieldString), "", 0);
     end;
 end;


Теперь вроде работает, выводит каждый раз в MessageBox-е содержание полей.. Но у меня в таблице есть еще поля типа даты, они почему-то тоже определяются как fldZSTRING.. и выводятся в MessageBox-е всякие иероглифы.. Подскажите мне пожалуйста.. очень надо..



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2007.06.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.052 c
2-1180080747
delphino
2007-05-25 12:12
2007.06.17
Можно ли объединить два фильтра


2-1180345514
Юра
2007-05-28 13:45
2007.06.17
Курсовая работа!


1-1176894953
Jioniro
2007-04-18 15:15
2007.06.17
Определение координат


6-1164628055
Yurij-7
2006-11-27 14:47
2007.06.17
LDAP и работа с ним


15-1179635628
@!!ex
2007-05-20 08:33
2007.06.17
Сон....





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский