procedure TDatenbankoberflaeche.Initialisieren;
var DWResult: DWORD;
iUserLCID: integer;
begin
if Enabled
then
begin
iUserLCID := GetUserDefaultLCID;
// Wenn die Datenbank extern über Excel geöffnet ist dann wird sie geschlossen.
// wenn diese Datei nicht geschlossen wird, dann kommt es zu einer Exception!!!
if FindWindow('
XLMain','
Microsoft Excel - ' + ExcelDatenbankName) <> 0
then
SendMessageTimeout(FindWindow('
XLMain','
Microsoft Excel - ' + ExcelDatenbankName), WM_CLOSE, 0, 0,
SMTO_ABORTIFHUNG
or SMTO_NORMAL, 5000, DWResult);
FExcelApplication := TExcelApplication.Create(
Nil);
FExcelWorkbook := TExcelWorkbook.create(
Nil);
FExcelWorksheet := TExcelWorksheet.create(
Nil);
// vorhandener Exceldatei laden !!! wichtig !!! Die Anzahl der emtyParam ist Office-Versions abhängig
FExcelApplication.Workbooks.Open(FsDatenbankPfad + ExcelDatenbankName, emptyParam, emptyParam, emptyParam, emptyParam
, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam
, emptyParam, emptyParam, iUserLCID);
// Excel soll NICHT angezeigt werden
FExcelApplication.visible[iUserLCID] := false;
// verbinden des Workbooks und des Worksheets mit der in der exc geladenen Datei
FExcelWorkbook.ConnectTo(FExcelApplication.ActiveWorkbook);
FExcelWorksheet.ConnectTo(FExcelWorkbook.ActiveSheet
as ExcelWorksheet);
//Showmessage(FExcelWorksheet.Shapes.Range[1].;
GetAllSensorNamen;
// <--- Ermittlung aller vorhandenen Datensätze anhand der Namen funktioniert!!
SetItemsComboBox(FCBListe);
// <--- Setzt die Namen der vorhandenen in eine CheckBox funktioniert!!
GetAllSensorDaten;
//<--- hier werden die Daten ermittelt, die in der SetSensordatenAnzeige-Fkt gesetzt werden sollen.
SetSensordatenAnzeige;
// <--- in dieser Fkt werden die Text-Eigenschaften (eigentlich) geändert.
//Showmessage(inttostr(FExcelWorksheet.Shapes.Count));
end
else MessageBox(Self.Handle, '
Es sind Fehler beim Öffnen der Datenbank aufgetreten. Bitte beachten sie die Meldungen.', '
Datenbank kann nicht geladen werden',MB_OK);
end;
procedure TDatenbankoberflaeche.GetAllSensorDaten;
var Index: integer;
sTemp:
string;
begin
Index := GetItemIndex;
FRecord.sName := FCBListe.Items[
Index];
sTemp := FExcelWorksheet.Cells.Item[
Index+10,3];
FRecord.dWert1 := strtofloat(sTemp);
FRecord.dWert2 := strtofloat(FExcelWorksheet.Cells.Item[
Index+10,4]);
FRecord.dWert3 := strtofloat(FExcelWorksheet.Cells.Item[
Index+10,5]);
FRecord.dWert4 := strtofloat(FExcelWorksheet.Cells.Item[
Index+10,6]);
FRecord.dWert5 := strtofloat(FExcelWorksheet.Cells.Item[
Index+10,7]);
end;
procedure TDatenbankoberflaeche.SetSensordatenAnzeige;
var Index: integer;
begin
Index := GetItemIndex;
FLEWert1.Text := '
Hallo';
FLEWert2.Text := floattostr(FRecord.dWert2);
FLEWert3.Text := floattostr(FRecord.dWert3);
FLEWert4.Text := floattostr(FRecord.dWert4);
FLEWert5.Text := floattostr(FRecord.dWert5);
end;