Autor Beitrag
MatzeF.
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 13.08.07 16:41 
Hey Leute

bin öfters im Forum unterwegs aber diesmal hab ich einfach nichts finden können...

Ich lese aus einer Tabelle jeden String nacheinander aus

mit:

ausblenden Delphi-Quelltext
1:
DATA.Tabelle.Filter := 'SPALTE1 = ' + DATA.TabelleNAME.Value;					


der Value Wert ist dann z.B.:
ausblenden Delphi-Quelltext
1:
DATA.TabelleNAME.Value = 'XYZ'					


so kann ich alle meine Werte auslesen wie gewünscht.
Nur das Problem tritt auf wenn ein Wert auftaucht, der ein Hochkomma beinhaltet, z.B.:

ausblenden Delphi-Quelltext
1:
DATA.TabelleNAME.Value = 'XY'Z'					


Wie kann ich solche Werte auslesen?

Greez

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt
little-wolf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 47

WinXP
Delphi 5 Enterprise, Delphi 2006 Enterprise
BeitragVerfasst: Mo 13.08.07 16:44 
hallo matzef.

indem du anstelle von ' einfach #39 verwendest...

ausblenden Delphi-Quelltext
1:
DATA.TabelleNAME.Value = 'XY'+#39+'Z';					


gruss

little-wolf
MatzeF. Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 13.08.07 16:54 
das geht so nicht =)

ich weiss nicht welche Werte ich auslese
Ich lese die Zeile 1 und er gibt mir z.B. den Wert
'Siemens'

Zeile 2 z.B.
'Bosch'

und Zeile 3 z.B.
'Bosch's Ausenstelle'

die Werte sind in der Datenbank so gepflegt mit Namen mit Hochkomma ...
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Mo 13.08.07 16:55 
Oder einfach '' benutzen (2 ' hintereinander sind ein ' im string, '''' wäre also ein string von ' )

Edit: und wo ist das problem? :nixweiß:
Denn welcher Fehler o.ä. kommt, kann meine Glaskugel noch nicht auslesen ;)

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
little-wolf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 47

WinXP
Delphi 5 Enterprise, Delphi 2006 Enterprise
BeitragVerfasst: Mo 13.08.07 16:58 
bin bei deinem beispiel davon ausgegangen, dass "DATA.TabelleNAME.Value" der wert ist den du ausliest und "XY'Z" den, mit dem du vergleichen willst (also ein statischer vergleichswert im programmcode... dann wäre 'XY'+#39+'Z' eine mögliche lösung gewesen...

mit was vergleichst du denn in deinem programm? in deinem beispiel ist es ja (wie bereits erwähnt) ein statischer string...
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mo 13.08.07 17:39 
Was willst Du mit dem ausgelesenen String anstellen?
Willst Du daraus einen SQL-String bauen?
Willst Du damit Source erzeugen?
Willst Du damit was anderes machen?

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
MatzeF. Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Di 14.08.07 07:58 
Ok tschuldigung dann probier ichs noch mal ausführlich ;o)

ich hab 2 komplette Tabellen,
jetzt nehm ich von tabelle1 den ersten String und will wissen ob dieser Wert schon irgendwo in Tabelle2 vorhanden ist

- wenn nein soll er den Wert in tabelle2 schreiben und von tabelle1 den nächsten string lesen und wieder mit der ganzen tabelle2 vergleichen
- wenn ja soll er gleich mit dem nächsten tabelle1 string weitermachen

Das geht auch alles soweit gut, bis ein string auftaucht der ein Hochkomma beinhaltet (ich weiss nicht wann und wo
solche Werte auftauchen)

er liest die meisten Werte dann z.B. so aus:
ausblenden Delphi-Quelltext
1:
DATA.KundenNAME.Value = 'Diamond Co.'					

oder
ausblenden Delphi-Quelltext
1:
DATA.KundenNAME.Value = 'Ajex & Turner'					

...
bis der Wert selber ein Hochkomma beinhaltet:
ausblenden Delphi-Quelltext
1:
DATA.Kunde.NAME.Value = 'Zhou's Products Co., Ltd.'					


jetzt bringt er logischerweise den Fehler:
Fremdkunde: Error 3106: Unsupportet operator found in a record filter expression.
da er nur noch "Zhou" für den Value Wert erkennt und mit "s Products Co., Ltd.' " nichts mehr anfangen kann

und hier noch mein kompletter code:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
procedure THauptformular.Button2Click(Sender: TObject);
begin
      DATA.Fremdkunde.Active := True;
      DATA.Kunden.Filtered := False;
      DATA.Kunden.IndexName := 'NAME';
      DATA.Kunden.Filter := '';
      DATA.Kunden.Filtered := True;
      DATA.Kunden.First;

      While not DATA.Kunden.EOF Do
      Begin
      DATA.Fremdkunde.First;
      DATA.Fremdkunde.Edit;
      DATA.Fremdkunde.Filtered := False;
      DATA.Fremdkunde.IndexName := 'KUNDE';

      DATA.Fremdkunde.Filter := 'KUNDE = ' + '''' + Trim(DATA.KundenNAME.Value) + '''';

      DATA.Fremdkunde.Filtered := True;
      IF DATA.Fremdkunde.EOF Then
      Begin
             DATA.Fremdkunde.Filtered := False;
             DATA.Fremdkunde.Insert;
             DATA.Fremdkunde.Edit;
             DATA.FremdkundeAdsStringField2.Value := Trim(DATA.KundenNAME.Value);
             DATA.Fremdkunde.Post;
      End;
      DATA.Kunden.Next;
      end;
end;

ich hoffe ich hab mich jetzt richtig ausgedrückt ^^

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt
little-wolf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 47

WinXP
Delphi 5 Enterprise, Delphi 2006 Enterprise
BeitragVerfasst: Di 14.08.07 08:07 
mal davon ausgehend, dass DATA ein TQuery ist... warum machst du nicht folgendes?:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure THauptformular.Button2Click(Sender: TObject); 
begin
  if not datafremdkunde.active then
    datafremdkunde.open;
  if not datakunde.active then
    datakunde.open;
    datakunde.first;
  while not datakunde.eof do begin
    datafremdkunde.first;
    while not datafremdkunde.eof do begin
      if datakunde.fieldbyname('name').AsString = datafremdkunde.fieldbyname('name').AsString then
      begin
        //was auch immer er machen soll, wenn der name in beiden tabellen vor kommt...
        //wenn du nach dem ersten übereinstimmenden datensatz den inneren loop verlassen möchtest, einfach "break" aufrufen... dann macht er anschliessend mit dem äusseren loop weiter...
      end;
      datafremdkunde.next;
    end;    
    datakunde.next;
  end;
end;


so wird immer das "fremdkunden-query" durch geloopt und mit dem aktuellen "name" wert vom "kunden-query" verglichen...


Zuletzt bearbeitet von little-wolf am Di 14.08.07 08:34, insgesamt 2-mal bearbeitet
raiguen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 374

WIN 2000prof, WIN XP prof
D7EP, MSSQL, ABSDB
BeitragVerfasst: Di 14.08.07 08:27 
Ich würde das nicht mit Filtern ausführen sondern mit Locate:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
procedure THauptformular.Button2Click(Sender: TObject);
begin
      DATA.Kunden.Filter := '';
      DATA.Kunden.Filtered := false;
      DATA.Kunden.IndexName := 'NAME';

      DATA.Fremdkunde.Filtered := False;
      DATA.Fremdkunde.IndexName := 'KUNDE';
      DATA.Fremdkunde.Active := True;

      DATA.Kunden.First;

      While not DATA.Kunden.EOF Do
        begin
          if not DATA.Fremdkunde.Locate('KUNDE', Trim(DATA.KundenNAME.Value), []) then
            begin
              DATA.Fremdkunde.Insert;
              //DATA.Fremdkunde.Edit;
              DATA.FremdkundeAdsStringField2.Value := Trim(DATA.KundenNAME.Value);
              DATA.Fremdkunde.Post;
          end;
          DATA.Kunden.Next;
      end;
end;
MatzeF. Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Di 14.08.07 08:28 
hehe
macht nix
ich weiss auch nicht wie man delphi quelltext postet =)
...

vllt gibt es au irgendeine andere Möglichkeit anstatt den Filter

mit
DATA.Fremdkunde.FieldByName('NAME').AsString := Trim(DATA.KundenNAME.Value);
oder
DATA.Fremdkunde.FindField('NAME').AsString := DATA.KundenNAME.Value;

aber die hab ich nicht zum laufen gebracht da "Wert nicht verfügbar"
und ich weiss auch nicht ganz wie anwenden ...
MatzeF. Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Di 14.08.07 08:36 
Ja genau Jungs
funktioniert einwandfrei
und wieder n befehl kennen gelernt ^^

vielen Dank

bis zum nächsten mal ;o)

greez
little-wolf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 47

WinXP
Delphi 5 Enterprise, Delphi 2006 Enterprise
BeitragVerfasst: Di 14.08.07 08:37 
so, hab meinen "mist-post" von vorhin noch korrigiert... (siehe oben) :-)
sorry nochmals... :oops: