AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Access und SELECT TOP 1

Access und SELECT TOP 1

Ein Thema von handson · begonnen am 7. Jan 2011 · letzter Beitrag vom 7. Jan 2011
Antwort Antwort
handson

Registriert seit: 18. Jan 2007
Ort: Delmenhorst
113 Beiträge
 
Delphi 2007 Professional
 
#1

Access und SELECT TOP 1

  Alt 7. Jan 2011, 13:08
Datenbank: Access • Version: 2003 • Zugriff über: ADO
Hallo!

Ich möchte gerne mittels SQL Abfrage die nächste Nummer in der Datenbank finden. Die Datenbank ist Access und wird über ADO angesprochen. Ich benutze die folgende Abfrage:

Code:
SELECT TOP 1 kontonr FROM personenkonten
  WHERE mandantenid = '000' AND
        kontonr > '00010000'
  ORDER BY kontonr ASC;
Das Ergebnis ist auch korrekt, er liefert mir die nächste Nummer in der Tabelle heraus.
Das Problem ist aber, die Tabelle besitzt ca. 220000 Datensätze, und er orgelt erst alle 220000 Datensätze durch bevor er mir das Erbnis von einem Datensatz zurück gibt. Das gleiche mache ich auch mit einer MySQL-Datenbank mit dem Parameter LIMIT. Dort holt er auch nur einen Datensatz.

Meine Frage: Kann ich das bei Access noch irgendwie steuern, dass er nach einem gefundenen Datensatz gleich abbricht, denn er braucht jetzt immer ca. 5-10 sek. or Abfrage und das ist auf Dauer nicht schön.

Stephan
Stephan Faust
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Access und SELECT TOP 1

  Alt 7. Jan 2011, 13:13
Ich nutze kein Access, aber geht es evtl. so schneller?
SQL-Code:
SELECT MIN(kontonr) FROM personenkonten
  WHERE mandantenid = '000AND
        kontonr > '00010000'
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
handson

Registriert seit: 18. Jan 2007
Ort: Delmenhorst
113 Beiträge
 
Delphi 2007 Professional
 
#3

AW: Access und SELECT TOP 1

  Alt 7. Jan 2011, 13:20
Funktionieren tut es, das Ergebnis ist das gleiche, allerdings braucht er immer noch die gleiche Zeit, ca. > 10 sek.

Trotzdem, Danke für den Tipp.
Stephan Faust
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Access und SELECT TOP 1

  Alt 7. Jan 2011, 13:21
Hast Du einen Index auf kontonr gesetzt?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Bernerbaer
(Gast)

n/a Beiträge
 
#5

AW: Access und SELECT TOP 1

  Alt 7. Jan 2011, 13:29
Ich benutze access nicht und kenne dessen Sql syntax nicht, aber vielleicht vielleicht gehts ja schneller mit einer Aggregatsfunktion:

select first(kontonr)from ... group by...)
  Mit Zitat antworten Zitat
handson

Registriert seit: 18. Jan 2007
Ort: Delmenhorst
113 Beiträge
 
Delphi 2007 Professional
 
#6

AW: Access und SELECT TOP 1

  Alt 7. Jan 2011, 13:35
Nein, auch damit muss ich enttäuschen. Das Erbnis mit FIRST stimmt, aber die Performance nicht.

Ich habe das Gefühl, dass Access einfach für so große Datenmengen nicht ausgelegt ist. Nun gut,
ich will ja eh nur als Archivierungs-DB benutzen.

Trotzdem Danke!
Stephan Faust
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Access und SELECT TOP 1

  Alt 7. Jan 2011, 13:38
Die Antwortzeit ist wohl eher ein Problem von Access.
versuch mal mit dem Connection String zu spielen:
Code:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=MyDatabase;Persist Security Info=False;Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Engine Type=4;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False
Grüße
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz