Einzelnen Beitrag anzeigen

Der schöne Günther

Registriert seit: 6. Mär 2013
6.160 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Wie geht man mit zusammengesetzten Primärschlüsseln um?

  Alt 11. Mär 2014, 14:25
Ja, der Fremdschlüssel soll auch aus beiden Feldern bestehen. Wird aus der unbeholfenen Textdarstellung wohl nicht wirklich deutlich.

Ich habe beiden Tabellen mal ein künstliches Feld (Typ: String) hinzugefügt. Ist
artikel_id1 = 5
artikel_id2 = 536
dann ist
Artikel_idCOMBINED = 5.536

Das war einfacher als gedacht und klappt auch. Nur leider kommt die Lookup-Combobox, oder eher: Das DataSource damit nicht zurecht. Bei Anwendungsstart fliege ich mit einer Exception, dass er ein Feld mit diesem Namen nicht finden kann, raus.

Wen es interessiert, hier der Callstack:


Code:
:7672c41f KERNELBASE.RaiseException + 0x58
FireDAC.Stan.Error.FDException(???,???,???)
FireDAC.Stan.Error.FDException($2F5C180,???,2,???)
FireDAC.DatS.TFDDatSNamedList.ErrorNameNotFound('meineTabelle_idCOMBINED')
FireDAC.DatS.TFDDatSNamedList.ItemByName('meineTabelle_idCOMBINED')
FireDAC.DatS.TFDDatSBindedList.ItemByName('meineTabelle_idCOMBINED')
FireDAC.DatS.TFDDatSColumnList.ColumnByName('meineTabelle_idCOMBINED')
FireDAC.DatS.TFDDatSColumnSublist.Fill(???,'meineTabelle_idCOMBINED',nil,nil)
FireDAC.Comp.DataSet.TFDDataSet.InitLocateRow('meineTabelle_idCOMBINED','1.43')
FireDAC.Comp.DataSet.TFDDataSet.LocateRecord('meineTabelle_idCOMBINED','1.43',[],-1)
FireDAC.Comp.Client.TFDTable.InternalLocateEx('meineTabelle_idCOMBINED','1.43','',[],nil)
FireDAC.Comp.Client.TFDTable.LocateEx(???,'1.43',???,nil)
FireDAC.Comp.DataSet.TFDDataSet.Locate('meineTabelle_idCOMBINED','1.43',???)
Vcl.DBCtrls.TDBLookupControl.LocateKey
Vcl.DBCtrls.TCustomDBLookupComboBox.KeyValueChanged
Vcl.DBCtrls.TCustomDBLookupComboBox.UpdateListFields
Vcl.DBCtrls.TListSourceLink.ActiveChanged
Data.DB.TDataLink.SetActive(???)
Data.DB.TDataLink.UpdateState
Data.DB.TDataLink.DataEvent(???,0)
Data.DB.TDataSource.NotifyLinkTypes(deUpdateState,0,True)
Data.DB.TDataSource.NotifyDataLinks(deUpdateState,0)
Data.DB.TDataSource.SetState(???)
Data.DB.TDataSource.UpdateState
Data.DB.TDataSet.AddDataSource($2FC89B0)
Data.DB.TDataSource.SetDataSet($2F87910)
System.TypInfo.SetOrdProp(???,???,???)
System.Classes.TPropFixup.ResolveReference(???)
System.Classes.GlobalFixupReferences
System.Classes.TReader.ReadRootComponent($2F222C0)
System.Classes.TStream.ReadComponent($2F222C0)
System.Classes.InternalReadComponentRes(???,???,$2F222C0)
System.Classes.InitComponent(TMainForm)
System.Classes.InitInheritedComponent($2F222C0,TForm)
Vcl.Forms.TCustomForm.Create(???)



Ich glaube, ich bin alle hieraus resultierenden Übel selbst schuld. Einfach einen künstlichen Primärschüssel nehmen und das ganze Artikelnummer-Geraffel in eine neue Tabelle auslagern. Das wäre wohl in jeder Hinsicht besser.
  Mit Zitat antworten Zitat