22. maj 2002 - 16:20Der er
14 kommentarer og 1 løsning
Pl/Sql spørgsmål
jeg er så heldig at jeg har fået stillet forms tilrådighed, så jeg kan udvilke en applikation..
jeg har gjort så ledes at jeg viser en af mine tabeller på skærmen og sat den til at vise 10 columns...
det skal være så ledes at efter jeg har udfyldt et par af rækkerne at den så skal gå ned i table og finde en ledigt unikt nr og så sætte det ind i hver af de rækker som jeg har udfyldt....
så er det muligt at kunne løbe en "skærm variable column' igennem på en eller anden måde??
håber der er nogen som forstå mit spørgsmål pg som kan hjælpe mig...
Hvis du arbejder på en Oracle database, kunne du oprette en sequence i databasen (en sequence leverer unikke numre).
Normalt ville man så på f.esk en PRE-INSERT trigger på BLOK-NIVEAU i formen, hente næste nummer fra sekvensen og opdatere løbenrfeltet. (nummere vil så først blive vist på skærmen når der committes)
nr A nr B nr C 1 1 1 1 1 2 1 1 3 2 1 1 2 1 2 2 1 3
nr a... skal findes ud fra hvad nr jeg er nået til i databasen og derfra kunne sætte det ind flere steder i en table colomn som kan ses på skærmen.....
lille kode eksempel til at gennemløbe en tabel vist i formen:
PROCEDURE upd_line_no IS begin :global.line_no_fld := :system.cursor_block || '.LINE_NO'; first_record; check_package_failure; -- Gå til første record if :system.last_record <> 'TRUE' then loop if upper(name_in(:global.line_no_fld)) <> :system.cursor_record then copy(:system.cursor_record,:global.line_no_fld); -- Her behandeles recorden, i dette tilfælde sættes -- løbenrfeltet=recordnr end if; exit when :system.last_record = 'TRUE'; next_record; check_package_failure; -- behandle næste record end loop; end if; end;
prøver at samlign med noget andet.... sådan lidt fri oversat programmeringsprogs sjov....
select max(nr) into idnr from table;
idnr := idnr + 1;
For 1 to n loop
:id[n] := idnr;
i := i + 1;
end loop;
commit_form;
--------------------------------------
:id[n] skal forestille at være de/det text item(s) jeg sætter mit idnr ind i... så ledes at vær række få samme nr.... når jeg commit'er min form
for jeg har en skærm variable der hedder :ID ... men da der er mulighed for at sætte flere id ind eller vise flere id på samme tid i skærm variablen... så jeg kan ikk finde ud af at få den til at hoppe videre til næste felt i :ID skærmvariablen sådan så jeg kan give den en værdi....
Koden kaldes fra KEY-COMMIT som f.eks kan indeholde disse 2 linier: upd_form; -- en procedure i program units, som -- kalder første del af koden, som husker hvor -- cursoren var, og som videre kalder upd_line_no -- den anden procedure i program units commit_form;
koden i upd_line_no: copy(:system.cursor_record,:global.line_no_fld); -- Her behandeles recorden, i dette tilfælde sættes -- løbenrfeltet=recordnr kan du så erstatte med din egen kode til at finde løbenr ud fra tabeller, sekvenser eller hvordan du ellers ønsker, men løbenumrene visesstadig først når der committes.
har prøvet at fjerne Go_block linien.... og så brokker den sig over at de felter hvor i der skulle være indsat et nr ikke er blevet udfyldt... så den kan ikke gemme dem :((
mine kode eksempler er ikke en komplet løsning til dit problem, men skulle forhåbentlig være kilde til inspiration. du skal erstatte blok, felt og tabel navne med dine aktuelle navne fra din form og din database. Ud fra din sidste kommentar burde du nok bede om et forms kursus (det er et rimeligt omfattende design værktøj - og man får nok ikke det bedste resultat, hvis man er på bar bund og skal gætte sig til brugen af produktet). f.eks GO_BLOCK('DATABASEBLOKKEN') her skal DATABASEBLOKKEN erstattes med navnet på din blok i formen
det er jeg klar over..... det med Go_block...... og jeg er godt klar over det ikke er en komplet løsning.... mener selv at jeg har skiftet de ting der skulle skiftes......
men jeg kan ikke se udfra din kode hvor der bliver henvist til min column på skærmen...!!!!!!!
-- i variablen herunder (line_no_fld) gemmes blocknavn og feltnavn -- i dit tilfæde skal LINE_NO erstattes med ID :global.line_no_fld := :system.cursor_block || '.LINE_NO'; -- linien herunder gemmes den ønskede værdi i feltet som er refereret -- i variablen :global.line_no_fld -- den ønskede værdi var i mit tilfælde nummeret på den record jeg -- står i (:system.cursor_record) det kunne i stedet være en anden -- variable eller en konstant copy(:system.cursor_record,:global.line_no_fld);
så skulle jeg have gjort det rigtig nok.... men det virker ikk....
men jeg vil gerne sige mange mange tak for din hjælp :)))) jeg må desværre nok prøve at finde på en knapt så smart løsning....
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.