mojaSymfonia FORUM
https://forum.mix-soft.pl/

Dlaczego nie działa SetKeySeg na stringach?
https://forum.mix-soft.pl/viewtopic.php?f=15&t=836
Strona 1 z 1

Autor:  iredy [ 2009-05-12, 12:00 ]
Tytuł:  Dlaczego nie działa SetKeySeg na stringach?

Witam,
pytanie może lamerskie, ale moje doświadczenie z AmBasic'em dopiero rośnie ;)
Jak w temacie, gdy w kluczu bazy jednym z pól jest pole typu string, wypełnienie tego pola - SetKeySeg, nie daje pożądanych efektów?

tzn np coś takiego:
Kod:
   SetKey(iBazaKH,"kod")
   SetKeySeg(iBazaKH,"typi",0)
   SetKeySeg(iBazaKH,"kod",kontrahent)

   err = GetRec(iBazaKH,EQ)
   while !err
      print LF; GetField(iBazaKH,"kod")
      err = GetRec(iBazaKH,NX)
   wend


wiem zadziała to w ten sposób:
Kod:
   SetKey(iBazaKH,"kod")
   SetKeySeg(iBazaKH,"typi",0)
   SetKeySeg(iBazaKH,"kod",kontahent)

   err = GetRec(iBazaKH,EQ)
   while !err
      if GetField(iBAzaKH,"kod")==kontrahent then print LF; GetField(iBazaKH,"kod")
      err = GetRec(iBazaKH,NX)
   wend


ale przecież wersja 1. też niby powinna zadziałać... Efekt jest taki jakby zastosować GE zamiast EQ... Czemu?

pozdrawiam
irek

Autor:  jacekk [ 2009-05-12, 22:34 ]
Tytuł: 

Jakie dane chcesz otrzymac ?
Klucz "kod" w bazie KH nie jest duplikowalny więc należy oczekiwac tylko jednego rekordu. Tak więc nie ma sensu stosowac pętli.
Prawidłowy kod:

Kod:
SetKey(iBazaKH,"kod")
SetKeySeg(iBazaKH,"typi",0)
SetKeySeg(iBazaKH,"kod",kontrahent)
err = GetRec(iBazaKH,EQ)
if !err then
  print using "\nid=%d kod=%s",GetField(iBazaKH,"id"),GetField(iBazaKH,"kod")
else
  message "Nie znaleziono kontrahenta: "+kontrahent
endif

Autor:  rafal [ 2009-05-12, 22:44 ]
Tytuł: 

w przypadku kiedy istnieje rekord odpowiadający wartościom w kluczu (SetKeySeg) rzeczywiście EQ i GE da ten sam efekt.

Jeżeli nie ma takiego rekordu to GetRec( EQ )

a jaki efekt chciałeś osiągnąć?

Autor:  iredy [ 2009-05-14, 09:13 ]
Tytuł: 

Fajnie, wielkie dzięki za odpowiedź. Ale teraz pytanie - czyli jak mam pole string i jest ono duplikowalne, to jak wyciągnąć wszystkie rekordy z jakąś wartością tego pola? Użycie GE nie ma sensu - czy EQ w pętli ma sens?

irek

Autor:  wrob [ 2009-05-14, 11:17 ]
Tytuł: 

NX w petli :)

Autor:  Jarek75 [ 2009-05-15, 15:37 ]
Tytuł: 

Kod:
SetKey(bdok, "kontrdata")
SetKeySeg(bdok, "kontrahent", idk)
GetRec(bdok,GE)
while BaseError(bdok,0)==0 && GetKeySeg(bdok,"kontrahent")==idk
  sDok = GetField(bdok, "nazwa")
  print sDok; lf
  GetRec(bdok,NX)
wend

Strona 1 z 1 Strefa czasowa UTC+1godz. [letni]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/