Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2010, 09:54   #1
VladimirAleks
Пользователь
 
Регистрация: 11.09.2007
Сообщений: 34
По умолчанию ADOQuery не срабатывает для связанных таблиц

пробывал этот запрос в Access там возвращает значения, а вот через компонент ADOQuery ничего не возвращает, ADOQueryMain.RecordCount выдаёт ошибку.

ADOQueryMain.Active := False;
ADOQueryMain.SQL.Clear;
ADOQueryMain.SQL.Add('SELECT fev.Number AS PhoneNumber, fev.Expense, Phone.Limit AS PhoneLimit, [fev]![Expense]-[Phone]![Limit] AS MoreExpense ');
ADOQueryMain.SQL.Add(' FROM Phone INNER JOIN fev ON Phone.[Number] = fev.[Number]; ');
ADOQueryMain.Active := True;
ADOQueryMain.First;

For i := 1 to Count do
Begin
StringGridExpense.Cells[0,i] := ADOQueryMain.FieldByName('PhoneNumb er').AsString;
StringGridExpense.Cells[1,i] := ADOQueryMain.FieldByName('PhoneLimi t').AsString;
StringGridExpense.Cells[2,i] := ADOQueryMain.FieldByName('Expense') .AsString;
If ADOQueryMain.FieldByName('MoreExpen se').AsInteger < 0
Then StringGridExpense.Cells[3,i] := '0'
Else StringGridExpense.Cells[3,i] := ADOQueryMain.FieldByName('MoreExpen se').AsString;
ADOQueryMain.Next;
End;
VladimirAleks вне форума Ответить с цитированием
Старый 23.04.2010, 10:07   #2
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Цитата:
Сообщение от VladimirAleks Посмотреть сообщение
ADOQueryMain.SQL.Add('SELECT fev.Number AS PhoneNumber, fev.Expense, Phone.Limit AS PhoneLimit, [fev]![Expense]-[Phone]![Limit] AS MoreExpense ');

это на вскидку, в акцесс может и прокатит, но больше нигде. замени ! на .


упс ИЗВИНЯЮСЬ прокатывает..

а где ADOQueryMain.RecordCount? в цикле просто count..

Последний раз редактировалось vovk; 23.04.2010 в 13:18. Причина: чтоб понятно было что за упс :)
vovk вне форума Ответить с цитированием
Старый 23.04.2010, 11:16   #3
VladimirAleks
Пользователь
 
Регистрация: 11.09.2007
Сообщений: 34
По умолчанию

Цитата:
Сообщение от vovk Посмотреть сообщение
это на вскидку, в акцесс может и прокатит, но больше нигде. замени ! на .
Это не то, изменение на точку не помагает.

Цитата:
Сообщение от vovk Посмотреть сообщение
упс прокатывает..
что за упс?

Цитата:
Сообщение от vovk Посмотреть сообщение
а где ADOQueryMain.RecordCount? в цикле просто count..
ADOQueryMain.RecordCount - не считывается из запроса, поэтому ранее посчитанный count.
VladimirAleks вне форума Ответить с цитированием
Старый 23.04.2010, 12:24   #4
Dark_Spirit
Форумчанин
 
Аватар для Dark_Spirit
 
Регистрация: 05.02.2009
Сообщений: 324
По умолчанию

Цитата:
ADOQueryMain.RecordCount выдаёт ошибку.
текст ошибки?
Тяжело быть бестолковым.....
Dark_Spirit вне форума Ответить с цитированием
Старый 23.04.2010, 13:10   #5
VladimirAleks
Пользователь
 
Регистрация: 11.09.2007
Сообщений: 34
По умолчанию

Цитата:
Сообщение от Dark_Spirit Посмотреть сообщение
текст ошибки?
Вот:
рисунок_3.jpg
VladimirAleks вне форума Ответить с цитированием
Старый 23.04.2010, 13:21   #6
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

сделай лучше цикл както так, просто непонятно вообще от куда этот count берётся

Код:
 i := 1 
while not ADOQueryMain.Eof do
Begin
StringGridExpense.Cells[0,i] := ADOQueryMain.FieldByName('PhoneNumb er').AsString;
StringGridExpense.Cells[1,i] := ADOQueryMain.FieldByName('PhoneLimi t').AsString;
StringGridExpense.Cells[2,i] := ADOQueryMain.FieldByName('Expense') .AsString;
If ADOQueryMain.FieldByName('MoreExpen se').AsInteger < 0
Then StringGridExpense.Cells[3,i] := '0'
Else StringGridExpense.Cells[3,i] := ADOQueryMain.FieldByName('MoreExpen se').AsString;
ADOQueryMain.Next;
inc(i);
End;
vovk вне форума Ответить с цитированием
Старый 23.04.2010, 14:38   #7
VladimirAleks
Пользователь
 
Регистрация: 11.09.2007
Сообщений: 34
По умолчанию

ADOQueryMain.FieldByName('PhoneNumb er').AsString; - возвращает пустое значение. Кто-нибудь знает как это исправить?
VladimirAleks вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Редактирование связанных таблиц formeram БД в Delphi 2 11.09.2009 14:11
sql запрос на выборку записей из двух связанных таблиц Люсьен БД в Delphi 9 20.04.2009 16:07
Диспетчер связанных таблиц АлёнаP Microsoft Office Access 2 31.03.2009 17:59
Выорка данных Select из двух связанных таблиц... hijke БД в Delphi 0 28.10.2008 08:24