Avatar billede tommyrasmussen Nybegynder
22. september 2004 - 13:20 Der er 26 kommentarer og
1 løsning

Udvælgelse og placering af resultat i anden tabel

Jeg er ved at bygge videre på sms-gatewayen fra:
http://www.eksperten.dk/spm/541951

Nu er det sådan at jeg har brug for at kunne sende en sms til gatewayen med en forespørgsel på f.eks. (?BOKS ID12).
Denne sms placeres jvf. ovenstående spm/541951 i en tabel efter den er indkommet til sms-gatewayen.

Nu er det sådan at jeg gerne vil have en sms tilbage med de seneste temperaturværdier for BOKS NR. 12.
Disse temperaturværdier er registreret i en anden tabel.

Kan man lave noget der "kigger" på den indkomne SMS og udvælger de felter med temperaturværdier der svarer til boks nr. 12 ?
Det var een ting.

Når man har udvalgt felterne vil jeg gerne have dem placeret i tabellen SMSOUT sammen med telefonnummeret på den der spørger (det står nemlig også i et felt) - de sendes så nemlig automatisk via SMS-gatewayen !

Jeg ved ikke om det er for komplekst og umuligt, men det ville være dejligt hvis det kan lade sig gøre.
Avatar billede jensen363 Forsker
22. september 2004 - 16:36 #1
BOKS ID12 er det en unik værdi ... i hvilken tabel, og hvilken tabel skal der søges oplysninger fra ?

Fik du vores programkode til at køre automatisk ?
Avatar billede jensen363 Forsker
22. september 2004 - 16:55 #2
Det som svarer til "de seneste temperaturlæsninger" er det dem vi lavede med funktionen "DecodeString" ???

Forespørgslen på ID12, indkommer den i tabellen ozekismsin ?, og i givet fald, har denne et kendetegn som gør at man kan aflæse at der er tale om en forespørgsel, og ikke en inddatering af nye date ???
Avatar billede tommyrasmussen Nybegynder
22. september 2004 - 16:58 #3
"?BOKSID12" stammer fra tabellen ozekismsin
hvor strengen står i feltet MSG når det er modtaget
fra gatewayen.
Strengens værdi kunne ligeså godt være "?BOKSID25"
Det kommer an på hvilken boks man ønsker at se data fra.
Det afgøres af hvilken sms man sender.

Faktisk det samme felt som vi arbejdede på i den foregående kommunikation.

Når nu vi ved at det f.eks. er boks 12 eller boks 25 man ønsker at se på værdier fra, skal der kigges i tabellen DATA hvor boksens ID er oplistet sammen med 4 andre felter der indeholder temperaturværdier.

Boks 12 kan f.eks have 4 værdier der hedder 300 - 432 - 355- 426

Jeg skal så have placeret en streng i tabellen ozekismsout hvor der er et felt der hedder MSG - resultatet skulle så gerne være "BOKS12 Føler1: 300, Føler2: 432, Føler3: 354, Føler 4: 426"

Samtidigt skal modtagerens telefonnummer sættes ind i receiver feltet.
Informationen kommmer fra tabellen ozekismsin hvor telefonnummeret her står i Sender feltet.

Jeg har været ved at kode nogle omkringliggende tabeller og forespørgsler, og har endnu ikke haft tid til at kode den automatiske programkørsel.
Når jeg finder metoden skal jeg nok kommentere det på spørgsmålet.
Avatar billede tommyrasmussen Nybegynder
22. september 2004 - 17:01 #4
Nå, der kom du mig i forkøbet igen en gang.

Ja, det er de data vi lavede med den foregående decodestring.

Kendetegnet på om meddelelsen er en ny kodning af data eller en forespørgsel kunne være det "?" jeg har sat i starten af strengen
F.eks. "?BOKSID12" eller blot "?ID12"
Avatar billede jensen363 Forsker
22. september 2004 - 17:07 #5
Dvs. hvis der i MSG står BOKS efterfulgt af IDXX, er der tale om en forespørgsel, og hvis der står ID12,232,253,533,544 så er det tale om værdier som skal indlæses/decodes i tabellen Data ????
Avatar billede tommyrasmussen Nybegynder
22. september 2004 - 17:11 #6
Det er fuldstændigt korrekt
Avatar billede jensen363 Forsker
22. september 2004 - 17:18 #7
OK ... so far so good ...

Tabellen ozekismsin bliver vel hele tiden fodret med nye data ... Bliver denne tømt, eller kan man udvælge den seneste post med BOKS IDXX som værende den som der skal returneres data for ????

Hvorledes er teksten, er det BOKSID12 eller BOKS ID12 eller en helt tredie ???
Avatar billede tommyrasmussen Nybegynder
22. september 2004 - 17:28 #8
Det var faktisk ikke meningen at jeg ville tømme ozekismsin for data, for det er altid rart at have mulighed for at se en log over kommunikationen.

Den bliver iøvrigt konstant fodret med nye data.
Det ville være fint hvis man bare vedtog at det var den seneste post der skulle returneres data for.

Teksten kan være BOKSID12, det er blot at vedtage at sådan er det.

(Jeg er lige uden for rækkevidde lidt, men jeg skal nok kigge ind jævnligt for at se om der er nyt !)
Avatar billede jensen363 Forsker
22. september 2004 - 17:35 #9
Grunden til, at det er rimeligt vigtigt med BOKSxxxx er, at jeg skal skille strengen ad for at få isoleret tallet ( 12 ), da det er den værdi som der skal forespørgse på i Data ... derfor er det nædvendigt at fortælle hvor i teksten denne værdi er at finde ....

Men jeg vender tilbage ... måske først i morgen ... OK ???
Avatar billede tommyrasmussen Nybegynder
22. september 2004 - 17:58 #10
Det er selvfølgeligt rigtigt, det drejer sig om placeringen af tallet (12) i strengen.

Det er helt i orden med i morgen. Jeg forlanger intet, men er glad for al den hjælp jeg kan få.

På forhånd tak for hjælpen
Avatar billede jensen363 Forsker
23. september 2004 - 09:19 #11
God morgen ...

Med den fremgangsmåde jeg tidligere har skitseret, er det nu lykkedes at få isoleret de nødvendige data til placering i ozekismsout ... men ... her kan vel nødvendigvis ikke ligge mere end een post ( spørger af uvidenhed ) for, hvordan ved programmet ellers hvilken post der skal returneres via sms ???
Avatar billede tommyrasmussen Nybegynder
23. september 2004 - 09:30 #12
Det er min skyld, for jeg har ikke beskrevet hvordan ozekismsout virker.

Der skal placeres en streng der hedder "Send" i feltet status i den post der skal afsendes. (Dette kan gøres samtidigt med at man opretter posten). Når SMS-gatewayen har sendt SMS-beskeden ændres denne streng automatisk fra gatewayen til "transmitted". Derved ved man hvad der er sendt og hvad der endnu ikke er behandlet.
Avatar billede jensen363 Forsker
23. september 2004 - 09:34 #13
Ok ... det gør det jo noget nemmere ...

Til at starte med, skal du oprette en ny forespørgsel med følgende :

SELECT Last(ozekismsin.id) AS id, Last(ozekismsin.receiver) AS receiver, Last(Mid([msg],7)) AS BOKSID, Last(ozekismsin.receivedtime) AS receivedtime, Last(ozekismsin.operator) AS operator
FROM ozekismsin
WHERE (((ozekismsin.msg) Like "BOKS*"));

Denne gemmer du med benævnelsen qryRequest

Så vender jeg tilbage om lidt igen
Avatar billede tommyrasmussen Nybegynder
23. september 2004 - 09:47 #14
Ja, så langt kan jeg godt følge det.

Jeg vil mene at for at få telefonnummeret med over skal forespørgslen ændres til:

SELECT Last(ozekismsin.id) AS id, Last(ozekismsin.sender) AS receiver, Last(Mid([msg],7)) AS BOKSID, Last(ozekismsin.receivedtime) AS receivedtime, Last(ozekismsin.operator) AS operator
FROM ozekismsin
WHERE (((ozekismsin.msg) Like "BOKS*"));

"ozekismsin.receiver" ændres til "ozekismsin.sender" fordi det jo er den der har sendt beskeden der skal have en tilbage igen
Avatar billede jensen363 Forsker
23. september 2004 - 09:51 #15
Hvis det er der det korrekte telefonnummer er, er det korrekt c",)

Men nu begynder det at blive sjovt for alvor ... den rutine som flytter data til ozekismsout, den skal være køre hele tiden ... ik´ ...

Dvs. den skal afvikles i samme rutine som DecodeString ... dette giver jo lige det problem, at den vil indsætte den samme post hele tiden, med mindre vi vælger at slette posten i ozekismsin ... er dette en gangbar løsning ???
Avatar billede jensen363 Forsker
23. september 2004 - 09:53 #16
Alternativt skal vi have indarbejdet et ekstra felt i ozekismsin ( ja/nej ), hvor vi kan angive om data er sendt til ozekismsout
Avatar billede tommyrasmussen Nybegynder
23. september 2004 - 09:57 #17
Det er korrekt at alle de rutiner vi laver skal køre kontinuerligt.

men eftersom der er et ID felt i ozekismsin der er fortløbende kan man vel bruge princippet fra decodestring eksemplet med at gøre alle felter til nøglefelter. Så vil beskeden vel kun blive indsat én gang.

(Det kan godt være jeg har misforstået princippet, men så må du lige belære mig om det).

Der kan iøvrigt sagtens være et ekstra felt i ozekismsin (ja/nej). Det har ingen betydning for resten.
Avatar billede jensen363 Forsker
23. september 2004 - 10:02 #18
Problemet i ozekismsin er, at du ikke umiddelbart kan se ud af id, om der allerede er forespurgt på dette, da status er uændret ... dette kan vi ændre ved at indføje et ja/nej felt som opdateres efter hver forespørgsel.
Avatar billede tommyrasmussen Nybegynder
23. september 2004 - 10:11 #19
Kan man så ikke gøre feltet gældende for både det vi roder med nu, og også decodestring rutinen ?
Avatar billede jensen363 Forsker
23. september 2004 - 10:57 #20
Det kunne man princippielt godt ...
Avatar billede jensen363 Forsker
23. september 2004 - 11:21 #21
Først indsætter du et ja/nej felt i ozekismsin ( navn = SendRequest )

Dernæst ændrer du lige din forespørgsel ( qryRequest ) til :

SELECT ozekismsin.id, ozekismsin.sender, (Mid([msg],7)) AS BOKSID, ozekismsin.receivedtime, ozekismsin.operator
FROM ozekismsin
WHERE (((ozekismsin.msg) Like "BOKS*") AND ((ozekismsin.SendRequest)=False));

Til sidst ser din nye modulkode således ud :

Function DecodeString()

Dim strSQL As String
Dim db As DAO.Database

    Set db = CurrentDb()

    strSQL = "INSERT INTO Data ( ID, FELT1, FELT2, FELT3, FELT4 )"
    strSQL = strSQL & "SELECT Mid([MSG],3,2) AS ID, "
    strSQL = strSQL & "Mid([MSG],6,3) AS FELT1, "
    strSQL = strSQL & "Mid([MSG],10,3) AS FELT2, "
    strSQL = strSQL & "Mid([MSG],14,3) AS FELT3, "
    strSQL = strSQL & "Mid([MSG],18,3) AS FELT4 "
    strSQL = strSQL & "FROM ozekismsin;"

    db.Execute strSQL

    strSQL = "INSERT INTO ozekismsout ( receiver, msg, status ) "
    strSQL = strSQL & "SELECT qryRequest.sender, ""BOKS"" & [Data]![ID] & "" Føler1 : "" & [Data]![Felt1] & "", Føler2 : "" & [Data]![Felt2] & "", Føler3 : "" & [Data]![Felt3] & "", Føler4 : "" & [Data]![Felt4] AS SMSReturn, "
    strSQL = strSQL & """Send"" AS Status "
    strSQL = strSQL & "FROM qryRequest INNER JOIN Data ON qryRequest.BOKSID = Data.ID;"

    db.Execute strSQL
   
    strSQL = "UPDATE ozekismsin "
    strSQL = strSQL & "Set ozekismsin.SendRequest = True "
    strSQL = strSQL & "WHERE (((ozekismsin.msg) Like ""BOKS*""));"

    db.Execute strSQL

End Function
Avatar billede tommyrasmussen Nybegynder
23. september 2004 - 11:45 #22
Det er jo helt fantastisk som du ryster det ud af ærmet.
OG DET VIRKER !

Jeg har utroligt svært ved at lære dette kodesprog, så det er godt der er nogen der kan. Nu vil jeg sætte mig ned og tage ved lære af denne kode.

At få rutinerne til at køre automatisk og kontinuerligt finder jeg stadigvæk nok en løsning på, men du er velkommen til at smide en kommentar, hvis der skulle komme noget forbi.

Vær venlig at smide et svar - så point-tildelingen kan ske.
Tusind tak for hjælpen
Avatar billede jensen363 Forsker
23. september 2004 - 12:21 #23
Skulle det være en anden gang ... c",)

Har tidligere smidt svar på en automatisk rutine i den forrige http://www.eksperten.dk/spm/541951

Har du ikke afprøvet den ???
Avatar billede tommyrasmussen Nybegynder
23. september 2004 - 12:47 #24
Har set rutinen, men var vist lidt i tvivl om hvor den skulle køres fra.
Der står noget med at den skal køre i hovedformularen, men da jeg ikke havde nogle formularer åbnet vidste jeg det ikke rigtigt. Måske er det mig der igen er dum, og den skal placeres i et modul i VBA eller et eller andet.

Jeg har tildelt point i dette spørgsmål. Det foregående havde jeg allerede tildelt point i kan jeg se.
Avatar billede jensen363 Forsker
23. september 2004 - 12:52 #25
Den automatiske kørsel forudsætter, at der er en formular som kan aktiveres, idet timerfunktionen kun kan oprettes her. Så det er simpelthen bare at aktivere denne formular når du åbner databasen ( dette kan gøres via makroen Autoexec ).

Herefter aktiverer du rapportens modulkode og indsætter dette

Hvis du åbner databasen men en formular ( eksempelvis Hovedformular ), han du benytte denne kode ( i formularen ) :

Option Compare Database

Sub Form_Load()
    Me.TimerInterval = 6000
End Sub

Sub Form_Timer()
    DecodeString
End Sub
Avatar billede tommyrasmussen Nybegynder
23. september 2004 - 14:56 #26
Jeg tror altså ikke jeg er helt med, men dumhed kan du vel ikke kurere ?

Der hersker forvirring omkring begreberne for mig. Først tales der om en formular, lidt senere er det blevet til en rapport.

Jeg prøver det lige - det skulle jeg nok have gjort inden jeg begyndte på at vrøvle igen......

Hvorfor er det egentligt at denne kode kun kan køres via en formular/rapport og ikke bare i et modul for sig selv ?
Avatar billede jensen363 Forsker
23. september 2004 - 15:00 #27
Kan ikke errindre, at jeg har blandet rapport ind i teksten, men never mind ...

Jeg ved faktisk ikke, om den kan afvikles på andre måder, men jeg kender dem desværre ikke c",)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester