AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi DBfeldzugriff mit 'distinct substring' bei mssql
Thema durchsuchen
Ansicht
Themen-Optionen

DBfeldzugriff mit 'distinct substring' bei mssql

Ein Thema von mr.floppy81 · begonnen am 28. Jan 2005 · letzter Beitrag vom 28. Jan 2005
Antwort Antwort
mr.floppy81

Registriert seit: 18. Nov 2004
Ort: Wismar
77 Beiträge
 
Delphi 5 Enterprise
 
#1

DBfeldzugriff mit 'distinct substring' bei mssql

  Alt 28. Jan 2005, 10:27
moin,

habe schon eine ganze weile am rechner gesessen und bei folgendem Problem keine Lösung gefunden:

Es wird eine Variable 'Stückliste' über ein Editfeld namens 'Haupt1.Stueckliste' eingegeben.

In dieser Stückliste ist unter anderem das DBfeld 'bmk' vorhanden.
Das Feld 'bmk' setzt sich wie folgt zusammen:
'=xxx+yyy-zzz'
Dabei ist =xxx das anlagenkennzeichen, +yyy das Ortskennzeichen und -zzz das Bertriebsmittelkennzeichen.

Über ein Query möchte ich aber nur das Ortskennzeichen auslesen was hiermit geschieht:
Delphi-Quellcode:
procedure Thaupt2.FormShow(Sender: TObject);
begin

datamodule5.ADOQuery2.Active:=False;
 datamodule5.ADOQuery2.SQL.Clear;
 datamodule5.ADOQuery2.SQL.Add('select distinct substring(bmk,charindex(' + '''' + '+' + ''''+',bmk,1)+1,charindex(' + '''' + '-' + '''' + ',bmk,1)-charindex(' + '''' + '+' + '''' + ',bmk,1)-1) from procos.stuecklistenpos where stueckliste=' + '''' + Haupt1.Stueckliste.Text + '''');
datamodule5.ADOQuery2.Active:=True;
end
In einer DBlookupcombobox namens 'Ortskennzeichen' werden nun dies Ausgewählten Ortskennzeichen angezeigt, was auch ohne Problem funktioniert.
Wenn ich jetzt allerdings ein Ortskennzeichen auswähle so erscheint die Fehlermeldung:

"Im Projekt1.exe ist eine exception der Klasse eoleexception aufgetreten. Meldung'Ein Objekt das dem angefordertem Namen oder Ordinalverweis entspricht, kann nicht gefunden werden.'Prozess wurde angehalten. Mit einzelne Anweisung oder Start fortsetzen"

Soweit ich das verstehe sagt mir das Programm, dass das DBfeld in der Datenbank nicht vorhanden ist. Das ist ja auch richtig.
Aber ich möchte über eben die Ortskennzahl, alle Artikel auswählen, die diese Ortskennzahl besitzen...
Das soll dann hierüber geschehen:
Delphi-Quellcode:
procedure Thaupt2.OrtskennzeichenCloseUp(Sender: TObject);
begin

ortskennz:=ortskennzeichen.Text;
//dies wäre die dblookupcombobox
edit3.text:=ortskennz;
//dies ist nur eine Kontrolle ob er das OKZ übernimmt, was das
//Programm aber schon ncht macht (oben beschriebener Fehler)

datamodule5.ADOQuery3.Active:=false;
datamodule5.ADOQuery3.SQL.Clear;
datamodule5.ADOQuery3.SQL.Add('select sp.artikel,sp.menge,at.VerlustLstg,at.spulehaltelstg from procos.stuecklistenpos sp, procos.arttechnik at, procos.artikel a where sp.stueckliste='+''''+ stuecklist +''''+' and distinct substring(bmk,charindex(' + '''' + '+' + ''''+',bmk,1)+1,charindex(' + '''' + '-' + '''' + ',bmk,1)-charindex(' + '''' + '+' + '''' + ',bmk,1)-1)');
datamodule5.ADOQuery3.Active:=true;

end;
Ich hoffe dass ihr mir bei diesem Problem weiterhelfen könnt, denn wenn wir das beseitigen ist das Programm fast fertig....

LG Andreas



Achso ich vergass: verwendet wird der mssqlserver
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: 'eoleexception'bei DBfeldzugriff mit 'distinct substring

  Alt 28. Jan 2005, 10:48
Zitat von mr.floppy81:
Es wird eine Variable 'Stückliste' über ein Editfeld namens 'Haupt1.Stueckliste' eingegeben.

In dieser Stückliste ist unter anderem das DBfeld 'bmk' vorhanden.
Das Feld 'bmk' setzt sich wie folgt zusammen:
'=xxx+yyy-zzz'
Dabei ist =xxx das anlagenkennzeichen, +yyy das Ortskennzeichen und -zzz das Bertriebsmittelkennzeichen.
Damit hast du schon gegen eine goldene Regel von relationalen Datenbanken verstossen!!!
Zusammengesetzte Daten werden in einzelnen Feldern gespeichert.
Also brauchst du 3 Felder:
anlagencode CHAR(3), Ortcode CHAR(3), Betriebsmittelcode CHAR(3) Feld Feld bmk (also das zusammengesetzte Feld) ist einfach:
SELECT '='+anlagencode+'+'+Ortcode+'-'+Betriebsmittelcode AS bmk FROM ... Felder zusammensetzen ist ganz einfach; Datenfelder zerlegen ist sehr schwierig.
Dein Programmcode ist überigens sehr grausam; du solltest unbedingt die Funktion QuotedStr anstelle
deiner Hochkomma-Orgien verwenden.
Andreas
  Mit Zitat antworten Zitat
mr.floppy81

Registriert seit: 18. Nov 2004
Ort: Wismar
77 Beiträge
 
Delphi 5 Enterprise
 
#3

Re: 'eoleexception'bei DBfeldzugriff mit 'distinct substring

  Alt 28. Jan 2005, 11:20
hmm, habe ich dich jetzt nicht richtig verstanden oder du mich nicht....???

Also die Stückliste ist eine Tabelle in der u.a. die Artikelnummern, mengen,...und eben das Betriebsmittelkennzeichen (BMK) steht.
Die Stücklisten werden über eine Schnittstelle aus einem CAD Programm erstellt.
Dieses CADprogramm erstellt dann auch die Spalte BMK.
Zum Beispiel steht dann in der Spalte BMK:
=Waschanlage+Bürste1-borste123
=Waschanlage+Bürste2-borste435
=Waschanlage+Bürste1-Borste3
=Waschanlage+Bürste2-Borste333
:
:


Dieser Wert der BMK ist ein Wert..., es sind nicht mehrere Spalten.

Mit der ersten Prozedur such ich mir ja die dann ja den Wert Bürste1, Bürste2.... raus.
Dieser Wert Bürste1,Bürste2 wird in der combobox angezeigt.

Wenn ich jetzt Bürste2 auswähle sollen mir in einem dbstringgrid die in der stückliste hinterlegten werte wie artikelnummer, menge, ... ausgegeben werden die dieses Ortskennzeichen Bürste2 tragen. Die werte mit dem BMK 'bürste1'sind egal und werden erstmal nicht gebraucht.

Es soll dann im dbStringgrid stehen:
Delphi-Quellcode:
Artikelnr Menge BMK
1234 1 =Waschanlage+Bürste2-Borste333
1476 1 =Waschanlage+Bürste2-borste435

Das war was ich sagen wollte....

Oder gibt es eine Möglichkeit das anders zu realisieren???

LG Andreas
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#4

Re: DBfeldzugriff mit 'distinct substring' bei mssql

  Alt 28. Jan 2005, 16:03
Hallo mr.floppy81,

wie shmia schon gesagt hat, ist der Text kaum lesbar und du solltest mit QuotedStr arbeiten. In deiner where Bedingung steht:

...and distinct substring(bmk,charindex(' + '''' + '+' + ''''+',bmk,1)+1,charindex(' + '''' + '-' + '''' + ',bmk,1)-charindex(' + '''' + '+' + '''' + ',bmk,1)-1) was soll diese Bedingung bedeuten? Bzw. es ist ja gar keine Bedingung sondern nur die Bildung eines Substrings ohne Prüfung auf einen Wert.
Albert
Live long and prosper


MrSpock
  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 06:55 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