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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.07.2013, 21:17   #11
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

Цитата:
Чем это отличается от моего построения?
почти никакой) .. мне, например, так удобнее читать
Цитата:
Именно для этого данная переменная и используется.
как-то в коде не видно чтобы ты ее использовал
ну так какой итог?
сообщение появилось или нет?
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 28.07.2013, 21:25   #12
alfikss
Пользователь
 
Регистрация: 07.05.2013
Сообщений: 24
По умолчанию

Цитата:
как-то в коде не видно чтобы ты ее использовал
Не думал что это важно. Вот как использую.
Код:
if RecCnt=0 then
begin
  sg.Cells[0,1]:='';
  sg.Cells[1,1]:='';
  sg.Cells[2,1]:='';
  sg.Cells[3,1]:='';
  sg.Cells[4,1]:='';
  sg.Cells[5,1]:='';
  sg.Cells[6,1]:='';
  sg.Cells[7,1]:='';
  cbVer.ItemIndex:=-1;
  cbLoc.Checked:=false;
  cbLoc.Visible:=false;
  procent.Text:='';
  rub.Text:='';
  fix.Text:='';
  cb.ItemIndex:=-1;
  BitBtn1.Enabled:=false;
  BitBtn3.Enabled:=false;
end;
Цитата:
сообщение появилось или нет?
Если использовать именно в том месте, то нет, т.к. данные из Квери исчезают после выполнения строки
Код:
sg.RowCount:=1;
И тем более RecCnt имеет верное значение т.к.
Код:
RecCnt:=Query1.RecordCount;
выполняется нормально.

Заменил в Вашем условии RecCnt на Query1.RecordCount - естественно появляется, если условие стоит после
Код:
sg.RowCount:=1;

Последний раз редактировалось Stilet; 28.07.2013 в 21:53.
alfikss вне форума Ответить с цитированием
Старый 28.07.2013, 22:00   #13
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

ты можешь нормально показать весь код, а не выдергивать по 1й строчке? ... неужто мы догадываться должны о том что ты там еще с ними делаешь
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 28.07.2013, 22:29   #14
alfikss
Пользователь
 
Регистрация: 07.05.2013
Сообщений: 24
По умолчанию

ух...ну смотрите.
Код:
procedure TForm2.orgClick(Sender: TObject);
var
i,j,NomVer, RecCnt:integer;
mas: array[0..5] of string;
begin
if org.Items.Count <>0 then
begin
Query1.Active:=false;
Query1.SQL.Clear;
Query1.SQL.Add('SELECT cena.Complect, cena.Cena, compl.skidka, compl.skidka_rub, compl.fix, compl.po_cene, compl.version, compl.summ');
Query1.SQL.Add('FROM org INNER JOIN (cena INNER JOIN compl ON cena.id_cena = compl.id_cena) ON org.id_org = compl.id_org');
Query1.SQL.Add('WHERE org.nazv=:q');
Query1.Parameters.ParamByName('q').Value:=org.Items[org.ItemIndex];
Query1.Active:=true;
Query1.ExecSQL;
Query1.First;
RecCnt:=Query1.RecordCount;
i:=1;
sg.RowCount:=1;
sg.RowCount:=2;
sg.FixedRows:=1;
while not Query1.Eof do
begin
  inc(i);
  sg.RowCount:=i;
  sg.Cells[0,i-1]:=Query1.Fields[0].AsString;
  sg.Cells[2,i-1]:=Query1.Fields[1].AsString;
if Query1.Fields[2].Value<>'0' then sg.Cells[3,i-1]:=Query1.Fields[2].AsString
else sg.Cells[3,i-1]:='0';
if Query1.Fields[3].Value<>'0' then sg.Cells[4,i-1]:=Query1.Fields[3].AsString
else sg.Cells[4,i-1]:='0';
if Query1.Fields[4].Value<>'0' then sg.Cells[5,i-1]:=Query1.Fields[4].AsString
else sg.Cells[5,i-1]:='0';
if Query1.Fields[5].Value<>'0' then sg.Cells[6,i-1]:=Query1.Fields[5].AsString
else sg.Cells[6,i-1]:='0';

  mas[0]:='Ëîê';
  mas[1]:='Ôëåø';
  mas[2]:='ñ1';
  mas[3]:='ñ5';
  mas[4]:='ñ50';
  mas[5]:='Online';
  
if Query1.Fields[6].Value=mas[0] then sg.Cells[1,i-1]:='Ëîê';
if Query1.Fields[6].Value=mas[1] then sg.Cells[1,i-1]:='Ôëåø';
if Query1.Fields[6].Value=mas[2] then sg.Cells[1,i-1]:='ñ1';
if Query1.Fields[6].Value=mas[3] then sg.Cells[1,i-1]:='ñ5';
if Query1.Fields[6].Value=mas[4] then sg.Cells[1,i-1]:='ñ50';
if Query1.Fields[6].Value=mas[5] then sg.Cells[1,i-1]:='Online';

   sg.Cells[7,i-1]:=Query1.Fields[7].AsString;

Query1.Next;
end;
CurRow:=1;
procent.Text:=sg.Cells[3,1];
rub.Text:=sg.Cells[4,1];
fix.Text:=sg.Cells[5,1];
cb.ItemIndex:=cb.Items.IndexOf(sg.Cells[6,1]);
cbVer.ItemIndex:=cbVer.Items.IndexOf(sg.Cells[1,1]);
if cbVer.Text='Ôëåø' then cbLoc.Visible:=true else
begin
  cbLoc.Checked:=false;
  cbLoc.Visible:=false;
end;

Query1.Active:=false;
Query1.SQL.Clear;
Query1.SQL.Add('SELECT compl.flash');
Query1.SQL.Add('FROM org INNER JOIN (cena INNER JOIN compl ON cena.id_cena = compl.id_cena) ON org.id_org = compl.id_org');
Query1.SQL.Add('WHERE ((cena.Complect)=:compl) AND ((org.nazv)=:nazv);');
Query1.Parameters.ParamByName('compl').Value:=sg.Cells[0,CurRow];
Query1.Parameters.ParamByName('nazv').Value:=org.Items[org.ItemIndex];
Query1.Active:=true;
Query1.ExecSQL;
Query1.First;
if Query1.Fields[0].Value='0' then cbLoc.Checked:=false else cbLoc.Checked:=true;
BitBtn1.Enabled:=true;
BitBtn3.Enabled:=true;
if RecCnt=0 then
begin
  sg.Cells[0,1]:='';
  sg.Cells[1,1]:='';
  sg.Cells[2,1]:='';
  sg.Cells[3,1]:='';
  sg.Cells[4,1]:='';
  sg.Cells[5,1]:='';
  sg.Cells[6,1]:='';
  sg.Cells[7,1]:='';
  cbVer.ItemIndex:=-1;
  cbLoc.Checked:=false;
  cbLoc.Visible:=false;
  procent.Text:='';
  rub.Text:='';
  fix.Text:='';
  cb.ItemIndex:=-1;
  BitBtn1.Enabled:=false;
  BitBtn3.Enabled:=false;
end;
end;// if org.Items.Count <>0 then
end;
alfikss вне форума Ответить с цитированием
Старый 28.07.2013, 22:46   #15
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

1. тебе уже несколько раз сказали убрать
Код:
Query1.ExecSQL;
Query1.First;
из кода, а ты всё-равно по своему.
2. (не к проблеме) совсем непонятно использование mass ... его можно и даже нужно упразнить и сделать всё напрямую.
3. а твой sg.RowCount:=1; совсем никак не влияет на результат квери.
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 28.07.2013, 23:30   #16
alfikss
Пользователь
 
Регистрация: 07.05.2013
Сообщений: 24
По умолчанию

1)
Да убирал я эти строки. Не влияют на результат они =(
2) Про mass согласен.
3) И тем не менее именно после этой строки Квери теряет набор данных =(
alfikss вне форума Ответить с цитированием
Старый 28.07.2013, 23:32   #17
alfikss
Пользователь
 
Регистрация: 07.05.2013
Сообщений: 24
По умолчанию

Кстати, если убрать
Код:
sg.RowCount:=1;
sg.RowCount:=2;
sg.FixedRows:=1;
то все работает, правда криво и с вылетами, но зато Квери не теряет данные
alfikss вне форума Ответить с цитированием
Старый 28.07.2013, 23:50   #18
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

во-первых, если Вам говорят выкинуть мусорный код, то желательно это делать.
во-вторых, код у Вас однозначно индусский (уж не обижайтесь на прямоту!)
в-третьих, строчка с sg.RowCount:=1; никак не может влиять (и не влияет) на количество записей в Query1

а вот то, что Вы используете:
Цитата:
Код:
    Query1.Active := false;
    Query1.SQL.Clear;
    Query1.SQL.Add('SELECT cena.Complect, cena.Cena, compl.skidka, compl.skidka_rub, compl.fix, compl.po_cene, compl.version, compl.summ');
    Query1.SQL.Add('FROM org INNER JOIN (cena INNER JOIN compl ON cena.id_cena = compl.id_cena) ON org.id_org = compl.id_org');
    Query1.SQL.Add('WHERE org.nazv=:q');
    Query1.Parameters.ParamByName('q').Value := org.Items[org.ItemIndex];
    Query1.Active := true;
,....

    Query1.Active := false;
    Query1.SQL.Clear;
    Query1.SQL.Add('SELECT compl.flash');
    Query1.SQL.Add('FROM org INNER JOIN (cena INNER JOIN compl ON cena.id_cena = compl.id_cena) ON org.id_org = compl.id_org');
....
один и тот же Query1 для разных запросов - вот это однозначно и влияет на содержимое и на количество записей (RecordCount) в Query1

ну и последнее. Откройте для себя пошаговую отладку. Поставьте точку останова, пройдитесь по шагам и посмотрите, что у Вас происходит.


p.s. код пишите с отступами - там его удобнее читать, понимать, отлаживать и модифицировать...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.07.2013, 00:09   #19
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

Вы определитесь для себя и усвойте разницу между Query1.ExecSQL и Query1.Active := True или Query1.Open
ReportCube вне форума Ответить с цитированием
Старый 29.07.2013, 00:39   #20
alfikss
Пользователь
 
Регистрация: 07.05.2013
Сообщений: 24
По умолчанию

Цитата:
один и тот же Query1 для разных запросов - вот это однозначно и влияет на содержимое и на количество записей (RecordCount) в Query1
Они идут друг за другом. т.е. сначала отрабатывается один, потом другой.
Цитата:
Откройте для себя пошаговую отладку.
А как по вашему я определил на какой строке глюк?

Цитата:
Вы определитесь для себя и усвойте разницу между Query1.ExecSQL и Query1.Active := True или Query1.Open
Я понимаю что ExecSQL пишется в случаях вызова процедур и т.д., но т.к. это не является ошибкой при вызове SELECT, то его и использую. А Query1.Active := True я всегда так делал и все работало. Да и в этом "индусском" коде еще пара десятков селектов так работает замечательно.
alfikss вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
RecordCount в dbExpress при запросе SELECT с параметром Leximus БД в Delphi 0 31.05.2012 09:50
Сброс ОС PashaSoscov Операционные системы общие вопросы 5 07.01.2012 23:00
QTimer, сброс Vanta11a Qt и кроссплатформенное программирование С/С++ 2 13.09.2011 13:32
Listview vs сброс bulldog5293 Общие вопросы Delphi 0 13.01.2011 21:46
Проблема с RecordCount в SQLQuery Stalevar БД в Delphi 2 23.04.2009 18:57