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

Wyciąganie danych z bazy - ambasic
https://forum.mix-soft.pl/viewtopic.php?f=15&t=910
Strona 1 z 1

Autor:  artur17 [ 2009-06-10, 09:01 ]
Tytuł:  Wyciąganie danych z bazy - ambasic

Witam,
Próbuję wyciągnąć "id" dla rekordu z tabeli NT na podstawie pola "opis" i coś nie wychodzi...
Chodzi mi o taki efekt, który byłby odpowiednikiem zapytania SQL:
SELECT id FROM NT WHERE opis="zmienna opis"

Natomiast w AmBasicu mam z wyciąganiem danych z bazy wciąż problem... :(

Kod:
int sub Wartosc_ID (string kod, string opis)

   bdNT = Open KatalogFirmy() + "51nt.dat" for base "NT"
   SetKey (bdNT, "id")
   SetKeySeg (bdNT, "opis", opis)
   GetRec (bdNT, EQ)   
   string id1=GetField (bdNT, "id")
   Close bdNT

endsub

Autor:  rafal [ 2009-06-10, 09:12 ]
Tytuł: 

Chcesz znaleść rekord w bazie NT, który ma w polu "opis" pewną wartość a następnie sprawdzić jakie ID ma ten rekord?

W przykładzie użyłeś klucza "ID". W tym kluczu nie ma pola "opis".
Żeby zrealizować Twoje zadanie należy "przelecieć" całą bazę w poszukiwaniu wartości w polu opis.

Kod:
limit 8000
baseNT nt
nt.SetKey("id")
nt.SetKeySeg("id",0)
int err = nt.getrec(FS)
while err == 0
if nt.getfield("opis") == szykana_wartosc then print using "Id znalezionego rekordu %l"+lf,nt.getfield("id")
err = nt.getrec(NX)
wend


nie jest to zbyt wydajne rozwiązanie ale w tej chwili nie widzę innego.
napisz po co to robisz to może wymyślimy jakis inny sposób.

Autor:  artur17 [ 2009-06-10, 09:50 ]
Tytuł: 

Dziękuję za szybką odpowiedź.
Moim celem jest ominięcie problemu bariery 40 znaków w Handlu Premium przy dodawaniu nowego towaru do bazy.
Dłuższe nazwy zapisywane są w polu "opis" tabeli NT.
W tabeli TW występuje pole "idlongname". Właśnie w to pole muszę wpisać "id" z tabeli NT.
Wartość "id" planuję wyszukać po opisie...

Autor:  rafal [ 2009-06-10, 09:53 ]
Tytuł: 

artur17 pisze:
W tabeli TW występuje pole "idlongname". Właśnie w to pole muszę wpisać "id" z tabeli NT.
Wartość "id" planuję wyszukać po opisie...


Jak to wpisać? czy to znaczy, że dodajesz nowe towary z poziomu AMBasica?

Autor:  artur17 [ 2009-06-10, 10:16 ]
Tytuł: 

Tak, wstawiam rekordy z towarem z poziomu ambasica.

Autor:  rafal [ 2009-06-10, 10:31 ]
Tytuł: 

no to zmienia postać rzeczy

1. Wstawiasz towar
Kod:
baseTw tw
[...]
tw.SetField("kod","nowy towar")
tw.SetField("nazwa","nazwa nowego towaru")
[...]
tw.DoInsert()


2. Wstawiasz długą nazwę do bazy NT
Kod:
baseNT nt
[...]
nt.SetField("super", tw.GetField("id"))
nt.DoInsert()


3. Aktualizujesz rekord towaru
Kod:
tw.SetField("idlongname",nt.GetField("id"))
tw.DoUpdate()

Autor:  artur17 [ 2009-06-18, 08:47 ]
Tytuł: 

Mam jeszcze jedno pytanie.
W związku z tym, że podane przykłady dostępu i operacji na rekordach różnią się w składni od standardowego Helpa Ambasica w Symfonii, to chciałbym zapytać w jaki sposób można zamknąć plik bazy po wykonani operacji na rekordzie. Standardowo jest to polecenie "Close nrBazy"
Jednak taka konstrukcja polecenia nie działa przy zastosowaniu powyższych przykładów.

Podobny problem mam z obsługą błędów przy tych operacjach.

Autor:  wrob [ 2009-06-18, 10:03 ]
Tytuł: 

A poogladaj standartowe raporty w handlu - czesc z nich uzywa dokladnie takich metod jak opisane na forum - tam tez znajdziesz pozostale polecenia :-)

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