AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Datenbank Duplicates

Ein Thema von -187- · begonnen am 22. Jun 2010 · letzter Beitrag vom 25. Jun 2010
Antwort Antwort
Seite 2 von 6     12 34     Letzte »    
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#11

AW: Datenbank Duplicates

  Alt 23. Jun 2010, 01:04
Ja, Du hast recht, so wie oben geschrieben geht es nicht. aber so:
SQL-Code:
select upper(ip_name) from musik
group by upper(ip_name) having count(*)>1
Das hab ich in meiner DB probiert, ip_name -> feld, musik -> tabelle

Geändert von mkinzler (23. Jun 2010 um 07:34 Uhr) Grund: Code-Tag durch SQL-Tag ersetzt
  Mit Zitat antworten Zitat
-187-

Registriert seit: 24. Sep 2005
483 Beiträge
 
Delphi 2010 Architect
 
#12

AW: Datenbank Duplicates

  Alt 23. Jun 2010, 06:42
Hm wie es scheint bist du dem Problem auf die Schliche gekommen. Da ist die genau die Anzahl an Duplicates. Meine SQL Kenntnisse sind minimal. Was genau machen wir jetzt anders ? Wir selektieren alle UPPER CASE records die es öfter als einmal gibt. Wieso wurden die vorher nicht mit überprüft ? Oder macht das DBMS einen unterschied zwischen AAA und aaa ?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: Datenbank Duplicates

  Alt 23. Jun 2010, 07:40
Natürlich besteht ein Unterschied zwischen 'AAA', 'aaa' und 'Aaa' usw. Willst das nicht musst du einen Expression-Index auf UPPER() anlegen ( geht ab FB 2.1)
Markus Kinzler
  Mit Zitat antworten Zitat
borwin

Registriert seit: 14. Sep 2006
Ort: Rostock
72 Beiträge
 
Delphi 2007 Enterprise
 
#14

AW: Datenbank Duplicates

  Alt 23. Jun 2010, 07:43
Bei der Abfrage wird der Inhalt des Feldes genau überprüft. Dabei erflogt die Überprüfung Zeichenweise und ein 'A' ist dann etwas anderes als ein 'a'. Um das zu umgehen werden alle Zeichen auf UPPER gesetzt. Eine weitere Falle beim abfragen von Texten sind die Leerzeichen. Für die Datenbank ist 'MEIER' und 'MEIER ' nicht gleich. Um auch diesen Fall zu umgehen noch ein TRIM um die Felder legen.
Dann sieht das ganze dann so aus
Code:
SELECT TRIM(UPPER(ip_name))
FROM musik
GROUP BY TRIM(UPPER(ip_name))
HAVING COUNT(*)>1
Um das Einfügen von doppelten Datensätzen zu verhindern musst Du Deinen Index verändern.
Lege ein sogenantes COMPUTER BY Feld an mit Index an

Zitat:
create index idx_name on musik computed by (trim(upper(ip_name)));
Das verhinder schon doppelte Datensätze. Geht ab FB 2.0

Gruß Borwin
  Mit Zitat antworten Zitat
-187-

Registriert seit: 24. Sep 2005
483 Beiträge
 
Delphi 2010 Architect
 
#15

AW: Datenbank Duplicates

  Alt 23. Jun 2010, 08:32
Hm borwin also doppelte Einträge bekomme ich nicht dank dieser Zeile:

IBTable1.AddIndex('UNIQUE', 'NAMES', [ixUnique, ixCaseInsensitive]); Ich glaube ich werde die strings bevor ich zu der DB hinzufüge einfach einmal vorbehandeln:


MyStr:= LowerCase(MyStr); Damit sollte das Problem endlich gelöst sein, Danke !

Geändert von mkinzler (23. Jun 2010 um 08:38 Uhr) Grund: Delphi-Tags eingefügt
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#16

AW: Datenbank Duplicates

  Alt 23. Jun 2010, 11:13
Zitat:
Natürlich besteht ein Unterschied zwischen 'AAA', 'aaa' und 'Aaa' usw.
So natürlich ist es nicht. Wenn eine Collating Sequence für die Spalte angegeben ist, der Case-insensitiv ist, behandelt Firebird nach dem, was ich bis jetzt gelesen hat, unterschiedliche Case-Werte auch im Vergleich als identisch.

Die neusten Versionen von Firebird erlauben eigene Collating Sequences zu erstellen, wenn Du willst, dass Gross und Kleinbuchstaben in dem Feld als gleich behandelt werden, müsstest Du eine entsprechende Collating Sequence erstellen und bei dem Feld angeben.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: Datenbank Duplicates

  Alt 23. Jun 2010, 11:23
Da ist aber der Weg über den Expression Index einfacher
Markus Kinzler
  Mit Zitat antworten Zitat
-187-

Registriert seit: 24. Sep 2005
483 Beiträge
 
Delphi 2010 Architect
 
#18

AW: Datenbank Duplicates

  Alt 23. Jun 2010, 12:03
Angenommen ich füge diesen Index im nachhinein ein, werden dann die (jetzt neuen) Duplicates rausgeschmissen oder wie verhält sich das?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: Datenbank Duplicates

  Alt 23. Jun 2010, 12:20
Nein, werden sie wohl nicht. was aber geanu passiert, kann ich dir nicht sagen.
Markus Kinzler
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#20

AW: Datenbank Duplicates

  Alt 23. Jun 2010, 12:38
Zitat:
Da ist aber der Weg über den Expression Index einfacher
Es kommt darauf an. Bei einer kleinen Anwendung mit nur einer derartigen Spalte und einer Abfrage ist das etwas einfacher - wobei ja eine case-insensitive Collation in einem einzeiler von einer case-sensitiven abgeleitet werden kann, also auch nicht sehr kompliziert ist.

Bei einer grösseren Anwendung, wenn man viele Datenbankfelder standardmässig case insentiv haben will, sollte man aber auf jeden Fall besser eine collation erstellen. Sonst muss man bei jeder SQL-Abfrage auf Gleichheit an das Uppercase denken. Prinzipiell sollte man beim Design einer Anwendung eher darauf schauen, möglichst viel Logik in die Datenbank-DLL auszulagern (Trigger, Collations, Calculated Fields, Views). Dann ist die Programmierung der Anwendungen nachher schneller und weniger fehleranfällig.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 6     12 34     Letzte »    


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 18:10 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