AGB  ·  Datenschutz  ·  Impressum  







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

ContainsStr/Stringvergleich

Ein Thema von alphanumeric · begonnen am 12. Jan 2010 · letzter Beitrag vom 12. Jan 2010
Antwort Antwort
alphanumeric

Registriert seit: 9. Nov 2009
79 Beiträge
 
Delphi 2009 Enterprise
 
#1

ContainsStr/Stringvergleich

  Alt 12. Jan 2010, 11:44
Servus,

kurz zur vorgeschichte.

ich habe einen Email verteiler fest als XML definiert aus welcher die empfängeradresse je nach Kundenauftrags-Typ ausgelesen wird.
Im Kundenauftrag befinden sich Freigaben diverser Mitarbeiter. Wenn Freigegeben, sollen diese ebenfalls eine Kopie der Email erhalten. Problem ist: es kann vorkommen, dass nutzer doppelt sind.
Da die nutzer in ner DB eingetragen sind, vergleiche ich zuerst ob die Email adresse vorhanden ist, wenn nicht, trage ich in die Empfängerzeile den im Kundenauftrag hinterlegten Namen ein, was i.d.R. meißt der Fall ist. Nun folgendes Problem: die Email adressen aus dem XML Verteiler können auch Kundenaufträge freigeben, d.h. diese können durchaus doppelt erscheinen. Genau das will ich unterbinden und wollte hier einen ContainsStr aufsetzen. Das sieht folgendermaßen aus:

Delphi-Quellcode:
if ContainsStr(AnsiString(moduleConfiguration.GetValue(VERTEILER_KEY_RA, '')),TrimRight(_dataSet_AuftraegeFlg.FieldByName('cfrei_v').AsAnsiString)) then
                    begin
                        //keine aktion
                    end
                    else
                    begin[...]
Da ContainsStr nur mit AnsiStrings funktioniert, muss ich beide umwandeln. bei der Umwandlung des Variants in einen AnsiString, wirft er mir nun aber eine Zugriffsverletzung. Weiter oben benutz ich dabei ebenfalls GetValue, wandel das ganze nur in einen string um. ohne AnsiString umwandlung, lässt sich das gute stück garnicht compilen.

Sitz wie immer ratlos hier, würd mich über hilfe freuen.


gruß
alphanum
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#2

Re: ContainsStr/Stringvergleich

  Alt 12. Jan 2010, 12:02
Was für eine Zugriffsverletzung? (der Fehlertext)

Also GetValue liefert einen Variant ... sicher daß in dem Variant auch ein String vorhanden ist
oder etwas, welches in einen String umgewandelt werden kann?
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
alphanumeric

Registriert seit: 9. Nov 2009
79 Beiträge
 
Delphi 2009 Enterprise
 
#3

Re: ContainsStr/Stringvergleich

  Alt 12. Jan 2010, 12:04
'Zugriffsverletzung bei Adresse 007F4769 in Modul 'KundenauftragReportDLL.dll'. Lesen von Adresse 00000004'. Prozess TestApplication.exe (2572)


ja bin mir sicher, schließlich nutze ich den string, weiter oben schonmal mit dem gleichen aufruf, nur dass ich den zu string wandle anstatt nem ansistring.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#4

Re: ContainsStr/Stringvergleich

  Alt 12. Jan 2010, 12:11
hmmm, hast du es dort auch mal mit String probiert?

Delphi sollte die Umwandlung String > AnsiString auch autoatisch hinbekommen.
Und im Notfall könnte man auch mehrmals umwandeln
AnsiString(String(moduleConfiguration.GetValue(VERTEILER_KEY_RA, '')))
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
alphanumeric

Registriert seit: 9. Nov 2009
79 Beiträge
 
Delphi 2009 Enterprise
 
#5

Re: ContainsStr/Stringvergleich

  Alt 12. Jan 2010, 13:13
ja mit string hab ichs auch probiert, dabei kam folgendes raus:

[DCC Fehler] KundenauftragReportDruck.pas(1624): E1058 Implizite String-Umwandlung mit potenziellem Datenverlust von 'string' zu 'AnsiString'


die doppelte umwandlung hab ich auch versucht, also erst zu string und dann zu ansi, da krieg ich dann wieder die Zugriffsverletzung.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#6

Re: ContainsStr/Stringvergleich

  Alt 12. Jan 2010, 13:21
Dieser "Fehler" ist egal, da es so oder so zu einem Datenverlust kommen kann.
Nur daß du bei expliziter Typumbandlung dieses provozierst und deswegen diese Meldung nicht mehr angezeigt wird.
(der Datenverlußt bezieht sich auf Unicodezeichen, welche nicht in den ANSI-Zeichenvorrat reinpassen)

Zitat:
ja mit string hab ichs auch probiert, dabei kam folgendes raus:
Das stört jetzt erstmal nicht.
Die Frage war ja mehr: Kommt es da auch zu soeiner Zugriffsverletzung?


Wenn ja, dann:
Bist du dir sicher, daß es an diesem Codeteil liegt und nicht an was Anderem?
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
alphanumeric

Registriert seit: 9. Nov 2009
79 Beiträge
 
Delphi 2009 Enterprise
 
#7

Re: ContainsStr/Stringvergleich

  Alt 12. Jan 2010, 13:29
RecipientsString.Append(string(moduleConfiguration .GetValue(VERTEILER_KEY_RA, '')));

das funktioniert, das hab ich weiter oben schon.

in meiner XML datei stehen email adresse, der verteiler_key steht für den string, welcher die email bezeichnet innerhalb der xml.

wenn ich das mit string probiere, kompiliert er nicht, also kann ich folglich auch keine zugriffsverletzung kriegen.


100% sicher bin ich mir auch nicht, das is halt das einzige was ich neu reingeschrieben habe, quasi code erweitert
  Mit Zitat antworten Zitat
alphanumeric

Registriert seit: 9. Nov 2009
79 Beiträge
 
Delphi 2009 Enterprise
 
#8

Re: ContainsStr/Stringvergleich

  Alt 12. Jan 2010, 13:51
ich bin total die pflaume, ich seh grad dass ich moduleConfiguration weiter oben freigebe. kein wunder warum da ne exception aufplopt
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#9

Re: ContainsStr/Stringvergleich

  Alt 12. Jan 2010, 13:59
*hust*
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort


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 12:27 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