Seite 1 von 1

[gelöst] TRUNCATE(a,b)?

Verfasst: Mi 5. Mai 2021, 17:14
von WbrunoT
Guten Tag,
komme von MS ACCESS, arbeite mich gerade durch das Base Handbuch und versuche anhand der db Medien_mit_Macros Prinzipien zu verstehen, nachzubauen und nach eigenem Bedarf anzupassen. Ich staune nicht schlecht über manche verschachtelte SQL, komme da aber an manchen Stellen nicht weiter.

Was bitte macht
TRUNCATE( "a"."Medien_ID_BC", - 1 ) / 10 )?
Laut Handbuch S. 584 schneidet TRUNCATE 'a' auf 'b' Zeichen nach dem Dezimalpunkt ab, (2.37456,2) = 2.37 . Es gelingt mir nicht, in einem Macro die Funktion darzustellen, z.B.
Sub Test1
Dim numZahl AS SINGLE
REM numZahl = TRUNCATE(1.23456,2)
MSGBOX (numZahl)
End Sub

Vielen Dank.

Re: TRUNCATE(a,b)?

Verfasst: Mi 5. Mai 2021, 19:50
von RobertG
TRUNCATE ist ein Befehl für die interne HSQLDB. Das ist also im SQL-Code zu benutzen, nicht in Basic.

Du brauchst stattdessen

Code: Alles auswählen

Round( expression as Double [,numdecimalplaces as Integer] )
Schau dazu auch in der Hilfe zu Basic nach. Da muss noch

Code: Alles auswählen

Option VBASupport 1
vorher zu aktiviert werden.
Ohne die Aktivierung ist das Ganze nur durch Konstruktionen wie das Abschneiden der nachkommazahlen und anschließend Zurückumwandeln möglich, wenn ich die Hilfe da richtig lese.

Den Code mit der "Medien_ID_BC" hast Du vermutlich direkt aus der Beispieldatenbank. Da wird auf jeden Fall so eine Klammer fehlen.

Re: TRUNCATE(a,b)?

Verfasst: Do 6. Mai 2021, 11:56
von WbrunoT
Vielen Dank.
Der Code ist tatsächlich nur ein Teil der Abfrage "Ausleihe_nicht_gesperrt", ein ")" wurde zuviel kopert. Der Sinn der Abfrage ist klar. Dieser Teil fragt offensichtlich einen Barcode ab.
Wird in TRUNCATE durch das "-1" quasi das Komma mit abgeschnitten, also eine Ganzzahl erzeugt?
Nebenbei: Respekt für die viele Arbeit mit der Dokumentation!

Re: [gelöst] TRUNCATE(a,b)?

Verfasst: Fr 7. Mai 2021, 18:09
von RobertG
Wenn ich das noch richtig im Kopf habe: Mit der '-1' bei TRUNCATE( "a"."Medien_ID_BC", - 1 ) schneide ich wohl die Prüfziffer von dem Barcode ab. Anschließend wird ja durch 10 geteilt. Dadurch wird die Zahl dann auf eine Zahl ohne Prüfziffer zurückgesetzt.
Der Gedanke dabei war: Die ID der Tabelle hat ja sonst nichts mit dem Barcode zu tun. Wenn ich aber einen Barcodescanner nutzen möchte braucht der die Prüfziffer. Also muss ich mit einer Prüfziffer einlesen, die Ziffer abschneiden und kann dann mit der automatischen ID von z.B. '1' des jeweiligen Mediums vergleichen.