Operation not applicable. W czym problem?

0

Witajcie,

Znów mam problem, który uniemozliwia normalne funkcjonowanie ojego programu.
Mam w procedurze coś takiego:

datamodule2.QueryGrafik.Locate('id',wybrana_komorka,[loPartialKey]);
data:=datamodule2.QueryGrafik.FieldByName('data').AsString;
datamodule2.QueryGrafik.First;
    if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Poniedziałek',[loPartialKey]))then  k:=1;

I teraz problem polega na tym, że jak w miejscu

datamodule2.QueryGrafik.Locate('dzien_tyg','Poniedziałek',[loPartialKey])

nie znajdzie takiego wiersza to wywala taki błąd:"Operation not applicable. " . A ja chcę żeby po prostu przypisał k:=1

Gdzie może tkwić problem?
Z góry dzięki.

0

daj cały text błedu bo coś mi isę wierzyć nie chce, że o to chodzi

0

Tak wyglądją dwie procedury które właściwie mają robić ta samo z tym, ze jedna ma wybierać dni do przodu, a druga do tyłu.

procedure Trejestracja.Nastpnydzie1Click(Sender: TObject);
var
i, id_komorki, k: integer;
data: string;
begin
//
datamodule2.QueryGrafik.Locate('id',wybrana_komorka,[loPartialKey]);
data:=datamodule2.QueryGrafik.FieldByName('data').AsString;
k:=0;

case (DayOfTheWeek(StrToDate(data))) of
  1: if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Wtorek',[loPartialKey])) then
     if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Środa',[loPartialKey])) then
     if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Czwartek',[loPartialKey])) then
     if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Piątek',[loPartialKey])) then
     if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Sobota',[loPartialKey])) then
     if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Niedziela',[loPartialKey])) then k:=1;

  2: if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Środa',[loPartialKey])) then
     if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Czwartek',[loPartialKey])) then
     if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Piątek',[loPartialKey])) then
     if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Sobota',[loPartialKey])) then
     if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Niedziela',[loPartialKey])) then k:=1;

  3: if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Czwartek',[loPartialKey])) then
     if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Piątek',[loPartialKey])) then
     if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Sobota',[loPartialKey])) then
     if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Niedziela',[loPartialKey])) then k:=1;
  4: if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Piątek',[loPartialKey])) then
     if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Sobota',[loPartialKey])) then
     if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Niedziela',[loPartialKey])) then k:=1;
  5: if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Sobota',[loPartialKey])) then
     if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Niedziela',[loPartialKey])) then k:=1;
  6: if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Niedziela',[loPartialKey])) then k:=1;
  7: k:=1;
   end;
if k=0 then
begin
   id_komorki:=StrToInt(datamodule2.QueryGrafik.FieldByName('id').AsString);
                  for i:=0 to Length(tab_panel)-1 do
                    begin
                      if tab_panel[i].Name='Kom'+IntTOStr(id_komorki) then
                        begin
                        KomorkaMouseMove(tab_panel[i],[ssAlt],Mouse.CursorPos.X,Mouse.CursorPos.Y);
                        ActiveControl:=tab_panel[i];
                        break;
                        end;
                    end;
end;
end;

procedure Trejestracja.Poprzednidzie1Click(Sender: TObject);
var
i, id_komorki, k: integer;
data: string;
begin
//

datamodule2.QueryGrafik.Locate('id',wybrana_komorka,[loPartialKey]);

data:=datamodule2.QueryGrafik.FieldByName('data').AsString;
datamodule2.QueryGrafik.First;
k:=0;

case (DayOfTheWeek(StrToDate(data))) of
   1: k:=1;
   2: if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Poniedziałek',[loPartialKey]))then  k:=1;
   3: if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Wtorek',[loPartialKey])) then
      if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Poniedziałek',[loPartialKey])) then  k:=1;
   4: if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Środa',[loPartialKey])) then
      if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Wtorek',[loPartialKey])) then
      if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Poniedziałek',[loPartialKey])) then k:=1;
   5: if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Czwartek',[loPartialKey])) then
      if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Środa',[loPartialKey])) then
      if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Wtorek',[loPartialKey])) then
      if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Poniedziałek',[loPartialKey])) then k:=1;
   6: if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Piątek',[loPartialKey])) then
      if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Czwartek',[loPartialKey])) then
      if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Środa',[loPartialKey])) then
      if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Wtorek',[loPartialKey])) then
      if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Poniedziałek',[loPartialKey])) then k:=1;
   7: if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Sobota',[loPartialKey])) then
      if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Piątek',[loPartialKey])) then
      if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Czwartek',[loPartialKey])) then
      if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Środa',[loPartialKey])) then
      if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Wtorek',[loPartialKey])) then
      if not(datamodule2.QueryGrafik.Locate('dzien_tyg','Poniedziałek',[loPartialKey])) then k:=1; 
  end;

   if k=0 then
    begin
    id_komorki:=StrToInt(datamodule2.QueryGrafik.FieldByName('id').AsString);
                  for i:=0 to Length(tab_panel)-1 do
                    begin
                      if tab_panel[i].Name='Kom'+IntTOStr(id_komorki) then
                        begin
                        ActiveControl:=tab_panel[i];
                        KomorkaMouseMove(tab_panel[i],[ssAlt],Mouse.CursorPos.X,Mouse.CursorPos.Y);
                        break;
                        end;
                    end;
    end;

end;

Co ciekawe kiedy ta "następnycdzień" dochodzi do końca tygodnia (niedziela) to reaguje tak jak powinna i nic nie robi. Natomiast ta "poprzednidzien" kiedy dochodzi do początku tygodnia to wywala dokladnie to co jest w temacie, ani słowa więcej.
W czym problem?

0

jesteś pewien, że nie da się tego prościej napisać? A co do błędu to nie mam pomysłu czemu się wywala. Może masz jednokierunkowy zbiór danych i w momencie, kiedy nic nie znajduje próbuje skoczyć na początek a nie może, ale to bardzo naciągana teoria.

Jeśli chcesz to poczytaj to - ja skończyłem na 20 poście od góry i nie znalazłem sensownego wytłumaczenie. Śmiem twierdzić, że BDE (bo o nie tu chyba chodzi) po prostu tak ma w pewnych sytuacjach. Zastanów się jeszcze raz, czy nie da się tego inaczej zrobić bo ten sposób jest dość skąplikowany. Jeśli nie widzisz innej drogi to może podaj treść problemu, który ten kod rozwiązuje to pomyślimy razem :)

0

No szukałem i nic.
Też mi się wydaje, że to sprawka BDE. Kiedyś też miałem podobny problem ale wymysliłem inne rozwiązanie zadania :-) Tym razem nie mogę znaleźć takiego rozwiązania.
Problem tyczy się tego samego o czym pisałem w innym topicu. O przchodzenie pomiędzy panelami znajdującymi się na innych panelach.
Wyglada to tak:
http://www.pencool.neostrada.pl/
Tam chciałem to zrobić tak, żeby używac do tego celu klawiszy strzałek w lewo i prawo przchodzić z jednej kolumny paneli na drugą.
Ale nie wiedziałem jak to zrobić bo one nie mają zdarzenia onKeypress. No to w ich menu kontekstowym dodałem ukryte item nastepny dzien i poprzedni i je zroiblłem visible:=false; Do nich dodałem skróty Ctrl+W i Ctrl+Q. Co prawda nie są to klawisze strzałek ale już lepiej.
A baza jest po to, bo ja pobieram wszystkie parametry tych kolorowych paneli z bazy. I patrzę jaki jest dzień a potem szukam tak jak w postach wyżej komórek na następne dni tygodnia.
Wiem troche to skomplikowane ale działałoby wszystko pięknie gdyby....
Szlak mnie trafia jak mi ten błąd wyskakuje. A tak miało być pięknie! ;(

1 użytkowników online, w tym zalogowanych: 0, gości: 1