Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.06.17;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.02 c
1-1176879638
DVM
2007-04-18 11:00
2007.06.17
Портится изображение ScrollBar.


11-1161719636
_Ламер_
2006-10-24 23:53
2007.06.17
EditBox почернел


3-1174986996
DelphiLexx
2007-03-27 13:16
2007.06.17
Динамическое создание и удаление полей


1-1177061372
Лысеющий Самурай
2007-04-20 13:29
2007.06.17
Как получить выделенный текст


15-1179883929
Mozart
2007-05-23 05:32
2007.06.17
Поиск файлов по локальной сети.