Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Skript für Access

Begonnen von Niggemann, Juli 18, 2023, 16:22:36

⏪ vorheriges - nächstes ⏩

Niggemann

Hallo zusammen,

Ich suche Skript für eine Access Datenbank das mir eine Spalte durchgehent nummeriert bezogen auf

eine andere Spalte.
Als Beispiel:
Spalte "ART_NR" und Spalte "ART_NR_ID"
"000130"    auf    1
"001200"    auf    2
"1"    auf    3
"WA841011"auf    1137002
Die Spalte "ART_NR" ist als Textspalte erstellt und hat momentan 1137002 Zeilen.
Die Spalte "ART_NR_ID" ist als Zahlenspalte erstellt.
Hintergrund für die Frage ist folgender:
Ich rufe aus Autocad mittels Lisp über eine SQL Abfrage eine Artikelnummer mit den
5 folgenden Artikelnummern auf, so das ich in meinem Fenster 6 Artikel angezeigt bekomme.
Ich bekomme also mit einer Abfrage 6 Artikel, wenn ich jetzt in meinem Lisp-Fenster nach
unten scrolle, also das Ende meiner 6 angezeigten Artikel wird der 1. Artikel aus der Liste gelöscht und

der nächste Artikel hinten angehangen. Dieses funktioniert auch super, mein Problem liegt
jedoch darin das es je nach Rechner zwischen 9 und 12 Stunden dauert die "ART_NR_ID"
über Autocat zu erstellen diese ist mir einfach zu lang.
Meine Überlegung ist eigentlich die über ein Skript diesen Vorgang direkt in Access durch führen

zulassen und das ich es über eine SQL Anweisung aus Autocad heraus starten kann.
Ich mu allerdings sagen das ich die Acces Datenbank nur zum Ablegen der Daten nutze
und keine Ahnung von Access habe, die SQL anfragen habe ich mir mühselig zusammen gesucht.
Kann mir hier jemand weiter helfen?
Gruß
Norbert

ebs17

Mit freundlichem Glück Auf!

Eberhard

Niggemann

Hallo Eberhard,
danke für die schnelle Antwort.
Die Abfrage ist nicht mein Problem, sondern das erstellen bzw. füllen der Spalte "ART_NR_ID" in Access. Dabei stell sich mir die Frage, ist es Sinnvoller diese Spalte als Text Spalte oder als Zahlen Spalte zu betreiben.
Gruß
Norbert

markusxy

Zitat von: Niggemann am Juli 18, 2023, 18:29:29Dabei stell sich mir die Frage, ist es Sinnvoller diese Spalte als Text Spalte oder als Zahlen Spalte zu betreiben.

Grundsätzlich nimmt man wenn möglich eine Zahl, aber ohne brauchbare Infos kann man nichts sagen.
Vielleicht erklärst du mal denn Sinn der Spalte.
Außerdem mit der angeführten Logik kann wohl niemand was anfangen.

ebs17

Wenn Du einfach eine durchlaufende Nummer brauchst und die Tabellensortierung augenscheinlich die richtige ist, brauchst Du nur ein Autowertfeld in der Tabelle ergänzen. Das ist entsprechend Deiner Übersicht eine Sekundensache und einfach per Hand über den Tabellenentwurf.

ZitatDie Abfrage ist nicht mein Problem
Eine Geschichte von einem Wölkchen über dem Amazonas.
Mit freundlichem Glück Auf!

Eberhard

Niggemann

@markusxy,

"Grundsätzlich nimmt man wenn möglich eine Zahl, aber ohne brauchbare Infos kann man nichts sagen."

Die Frage beruht auf meine Beobachtung.
Ich erstelle eine SQL Abfrage mit:
->Einer Artikelnummer die in einem Textspalte steht kommt der Artikel sofort, es wird wohl einige Millisekunden dauern aber ich merke das nicht.
->Einer EAN Nummer die in einer Zahlenspalte steht dauert es 4 - 5 sec. bis der Artikel angezeigt wird.
Meine Tabelle hat über 1100000 Artikel (Zeilen) Tendens steigend.

"Vielleicht erklärst du mal denn Sinn der Spalte."

Sinn der Spalte ist es eine Basis zu haben um den Artikel davor oder dahinter aus zuwählen.
Die Artikelnummern sind nicht Fortlaufend, Beispiel:
Artiklenummer 100001 Art_NR_ID = 999901
Artiklenummer 100010 Art_NR_ID = 999902
Die Artikelnummern 100002 bis 100009 gibt es nicht.
Wenn ich jetzt auf Artikelnummer 100001 stehe kann ich eine Abfrage erstellen mit
Art_NR_ID = 999901 + 1 und bekomme den Artikel mit der Nummer 100010.
Aus diesem Grund benötige ich diese Spalte.
Diese Spalte fülle ich Momentan in AutoCad aber das dauert mir zu lange, bei kleinen Tabellen mit 10000 Artikeln geht das noch aber bei so Großen Tabellen ist der Zeitaufwand einfach zu groß.
AutoCad hat das Problem das es zwar schnell lesen kann aber beim Schreiben dauert es halt.
Diese Prozedur muss ich einmal im Monat machen, dann werden die Artikel geänder, gelöscht oder neue Artikel angelegt. Zwischendurch wird kein Artikel gelöscht, sodas eine Permanente Erstellung der Spalte nicht nötig ist.


@Eberhard,
deine Vorschlag höhrt sich gut an aber wenn ich das richtig sehe muß ich immer in Access dieses händich durch führen. Das wäre zwar eine Lösung aber was mache ich bei einer Datebank die auf einem Rechner ist wo kein Access installiert ist. Deshalb suche ich nach einer Lösung die ich aus AcadCad anstossen kann. Wenn ich das falsch sehn nimm es mir nicht übel ich hab halt von Access keine Ahnung.
Sieh dir bitte meine Antwort an  Markusxy an.

Gruß
Norbert

MzKlMu

#6
Hallo,
ZitatEiner EAN Nummer die in einer Zahlenspalte steht
prüfe mal ob das wirklich eine Zahlenspalte (Datentyp) ist.
Eine EAN Nummer ist oftmals so lang, dass eine Zahl gar nicht geht.
ZitatMeine Tabelle hat über 1100000 Artikel (Zeilen) Tendens steigend.
Bei dieser Datensatzzahl und steigender Tendenz ist mMn nur eine Zahl (Longinteger) sinnvoll.

Gruß Klaus

Niggemann

Du hast recht ist meine Unwissenheit bzw. Blödheit gewesen es ist eine Textspalte und keine Zahlenspalte werde dieses heute Abend ändern.
Danke für den Hinweis.

Gruß
Norbert

ebs17

#8
Zitatwas mache ich bei einer Datebank die auf einem Rechner ist wo kein Access installiert ist
Für Arbeiten am Access-Backend braucht man nicht zwingend eine Accessinstallation. DDL (SQL), DAO und ADODB sind in einer üblichen Windowsinstallation vorhanden und verwendbar. Deine Abfrage läuft ja auch, oder?
ALTER TABLE DeineTabelle ADD COLUMN NeuesFeld COUNTER(1,1)Verbindungsdaten aus Deiner Anwendung zur DB hast Du ja.

Bei 1,1 Mio Datensätzen greifst Du auf vorhandene Indizes zurück?
Mit freundlichem Glück Auf!

Eberhard

Niggemann

Nein ich benutze kein Index, wüste auch nicht wofür.
Ich rufe einen Artikel nur über die Artikelnummer auf oder über einen Matchcode und ganz selten über die EAN Nummer.
Ich benötige auch nur die Daten die in diesem vorhanden sind.

Gruß
Norbert

Niggemann

Dein Vorschlag ist bei mir leier nicht möglich es kommt diese Fehlermeldung:
"Ergebnistabelle darf nicht mehr als ein Feld vom Typ Autowert
haben."
Ich habe schon ein Feld mit einem Autowert und diese brauche ich auch.

Gruß
Norbert

MzKlMu

#11
Hallo,
es ist ziemlich blauäugig bei dieser Datenmenge auf einen Index zu verzichten.
Ein Index ist hier unerlässlich, gerade weil du nur nach einer Artikelnummer suchst. Ohne Index werden immer alle Datensätze durchsucht. Mit Index wird, wenn der Artikel gefunden wurde, die weitere Suche sofort abgebrochen, was ja sinnvoll ist.

Eine Datenbank ohne Index bei Feldern mit denen sortiert und/oder gesucht wird ist eine Krücke. Mindestens die Artikelnummer und die EAN Nummer sollte indiziert sein.
Gruß Klaus

Niggemann

Hallo Klaus,
das mit dem Index war eine guter Vorschlag von dir, habe ich gleich umgesetzt und es klappt.
Ein Proplem gelöst.
Gruß
Norbert

ebs17

ZitatNein ich benutze kein Index, wüste auch nicht wofür.
Grundlagen - SQL ist leicht ( 8 ) - Index
Es könnte sein, dass man die erzielbare bessere Performance benötigt ...
Mit freundlichem Glück Auf!

Eberhard

Beaker s.a.

ZitatEine EAN Nummer ist oftmals so lang, dass eine Zahl gar nicht geht.
Ein echter EAN ist 8, 12 oder 13 Zeichen lang, - inkl. PZ.
Diese und auch alle anderen Barcodes sind immer Text, da sowohl führenden
Nullen als auch Buchstaben und Sonderzeichen enthalten sein können.
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)