/********************************************************************/
/* Datei / Version|.../tankdaten.cpp / 1.0 */
/* Autor / Erstellt|Christian Hayer / 31.05.2003 */
/* |Philipp Eder */
/* Autor / Update| */
/*----------------------|-------------------------------------------*/
/* Copyright|FHTE - IT2a (Gruppe: PetrolSoft) */
/* Internet|http://it.chayer.de/petrolsoft */
/* Email|petrolsoft@it.chayer.de */
/*----------------------|-------------------------------------------*/
/* Aufgabe|Verwaltung der Tankdaten */
/*----------------------|-------------------------------------------*/
/* Eingang|Tankdaten */
/*----------------------|-------------------------------------------*/
/* Ausgang|Tankdaten und Statistikwerte */
/*----------------------|-------------------------------------------*/
/* Verwendete Funktionen|OnTankdatenCreate(); OnTankdatenDelete(); */
/* |OnTankdatenEdit(); OnTankdatenNext(); */
/* |OnTankdatenPrev(); OnCreate(); */
/* |OnKillFocus(); OnPaint(); */
/*----------------------|-------------------------------------------*/
/* Globale Variablen|db2, frzset2, tdset2, tdanzahl */
/*----------------------|-------------------------------------------*/
/* Fehlerbehandlung|Abfangen von falschen Formateingaben */
/********************************************************************/
/********************************************************************/
/* */
/* This program is free software; you can redistribute it and/or */
/* modify it under the terms of the GNU General Public License as */
/* published by the Free Software Foundation; either version 2 */
/* of the License, or (at your option) any later version. */
/* */
/********************************************************************/
/////////////////////////////////////////////////////////////////////////////
// tankdaten.cpp : implementation file
//
#include "stdafx.h"
#include "Spritkostenverwaltung.h"
#include "tankdaten.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CDaoDatabase db2; // Datenbank-Variable
CDaoRecordset tdset2(&db2); // RecordSet für Tankdaten zuweisen
CDaoRecordset frzset2(&db2); // RecordSet für Fahrzeuge zuweisen
long tdanzahl; // Variable für Anzahl der Fahrzeuge, die in der DB abgelegt sind
/////////////////////////////////////////////////////////////////////////////
// CTankdatenView dialog
CTankdatenView::CTankdatenView(CWnd* pParent /*=NULL*/)
: CDialog(CTankdatenView::IDD, pParent)
{
//{{AFX_DATA_INIT(CTankdatenView)
m_TdAnmerkung = _T("");
m_TdDatum = COleDateTime::GetCurrentTime();
m_TdStand = 0;
m_TdStat_km = _T("");
m_TdStat_Kosten = _T("");
m_TdStat_Preis = _T("");
m_TdStat_Verbrauch = _T("");
m_TdSpritmenge = 0;
m_TdID = 0;
m_TdKosten = 0;
//}}AFX_DATA_INIT
}
void CTankdatenView::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTankdatenView)
DDX_Control(pDX, IDC_TankdatenDelete, m_TdDelete);
DDX_Control(pDX, IDC_TdStand, m_TdStandC);
DDX_Control(pDX, IDC_TdSpritmenge, m_TdSpritmengeC);
DDX_Control(pDX, IDC_TdKosten, m_TdKostenC);
DDX_Control(pDX, IDC_TdDatum, m_TdDatumC);
DDX_Control(pDX, IDC_TdAnmerkung, m_TdAnmerkungC);
DDX_Control(pDX, IDC_TankdatenCreate, m_TdCreate);
DDX_Control(pDX, IDC_TankdatenPrev, m_TdPrev);
DDX_Control(pDX, IDC_TankdatenNext, m_TdNext);
DDX_Control(pDX, IDC_TankdatenEdit, m_TdEdit);
DDX_Text(pDX, IDC_TdAnmerkung, m_TdAnmerkung);
DDX_Text(pDX, IDC_TdDatum, m_TdDatum);
DDX_Text(pDX, IDC_TdStand, m_TdStand);
DDX_Text(pDX, IDC_TdStat_km, m_TdStat_km);
DDX_Text(pDX, IDC_TdStat_Kosten, m_TdStat_Kosten);
DDX_Text(pDX, IDC_TdStat_Preis, m_TdStat_Preis);
DDX_Text(pDX, IDC_TdStat_Verbrauch, m_TdStat_Verbrauch);
DDX_Text(pDX, IDC_TdSpritmenge, m_TdSpritmenge);
DDX_Text(pDX, IDC_TdID, m_TdID);
DDX_Text(pDX, IDC_TdKosten, m_TdKosten);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CTankdatenView, CDialog)
//{{AFX_MSG_MAP(CTankdatenView)
ON_BN_CLICKED(IDC_TankdatenCreate, OnTankdatenCreate)
ON_BN_CLICKED(IDC_TankdatenDelete, OnTankdatenDelete)
ON_BN_CLICKED(IDC_TankdatenEdit, OnTankdatenEdit)
ON_BN_CLICKED(IDC_TankdatenNext, OnTankdatenNext)
ON_BN_CLICKED(IDC_TankdatenPrev, OnTankdatenPrev)
ON_WM_CREATE()
ON_WM_KILLFOCUS()
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// Wird beim Aufbau des Dialogs ausgeführt
int CTankdatenView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
CString sql; // locale CString-Variablen
CString Anmerkung,FrzBezeichnung; // String-Variablen für Felder
COleDateTime Datum; // Variable für Datumsausgabe
long kmStand,TdID,lastkm; // long-Variablen für Felder
float Spritmenge,Kosten; // int-Variablen für Felder
int TdDay, TdMonth, TdYear; // Variablen für Datum/Zeit-Wandlung
COleVariant var,i_var,d_var; // Variablen für den Datenaustausch mit der DB
var.ChangeType(VT_BSTR, NULL);
i_var.ChangeType(VT_I4, NULL);
d_var.ChangeType(VT_DATE, NULL);
db2.Open("PetrolSoft_DB.mdb"); // Datenbank öffnen
sql.Format(_T("SELECT * FROM Tankdaten WHERE Fahrzeug_ID = %d ORDER BY kmStand"),searchID);
tdset2.Open(AFX_DAO_USE_DEFAULT_TYPE,sql,NULL); // RecordSet für Tankdatenöffnen
sql.Format(_T("SELECT * FROM Fahrzeugdaten WHERE Fahrzeug_ID = %d"),searchID);
frzset2.Open(AFX_DAO_USE_DEFAULT_TYPE,sql,NULL); // RecordSet für Fahrzeugdaten öffnen
// Auslesen der Fahrzeugdaten aus dem RecordSet
frzset2.GetFieldValue("Fahrzeugbezeichnung",var);
FrzBezeichnung = (LPCSTR)var.pbstrVal;
FrzBezeichnung = "Tankdaten - " + FrzBezeichnung;
SetWindowText(FrzBezeichnung); // Dialog-Caption schreiben
if(!tdset2.IsEOF()) // If not EOF
{
tdset2.MoveLast(); // gehe zum letzten Datensatz
tdanzahl = tdset2.GetAbsolutePosition(); // bestimmen der Anzahl der Datensätze
// Auslesen der Tankdaten aus dem RecordSet
tdset2.GetFieldValue("Tank_ID",i_var);
TdID = (long)i_var.lVal;
tdset2.GetFieldValue("Datum",d_var);
Datum = COleDateTime(d_var);
tdset2.GetFieldValue("kmStand",i_var);
kmStand = (long)i_var.lVal;
tdset2.GetFieldValue("Spritmenge",i_var);
Spritmenge = (float)i_var.dblVal;
tdset2.GetFieldValue("Kosten",i_var);
Kosten = (float)i_var.dblVal;
tdset2.GetFieldValue("Anmerkung",var);
if (var.vt != 1) Anmerkung = (LPCSTR)var.pbstrVal;
// Variablen den Feldern zuweisen
m_TdDatum = Datum;
m_TdStand = kmStand;
m_TdSpritmenge = Spritmenge;
m_TdKosten = Kosten;
m_TdAnmerkung = Anmerkung;
m_TdID = TdID;
if (tdset2.GetAbsolutePosition() > 0)
{
tdset2.MovePrev();
tdset2.GetFieldValue("kmStand",i_var);
lastkm = (long)i_var.lVal;
tdset2.MoveNext();
}
else
{
frzset2.GetFieldValue("kmStand",i_var);
lastkm = (long)i_var.lVal;
}
// Statistikwerte ausgeben
m_TdStat_Preis.Format(_T("%5.2f €"),(Kosten/Spritmenge));
m_TdStat_km.Format(_T("%d km"),(kmStand-lastkm));
m_TdStat_Verbrauch.Format(_T("%5.2f l"),(Spritmenge/(kmStand-lastkm)*100));
m_TdStat_Kosten.Format(_T("%5.2f €"),(Kosten/(kmStand-lastkm)*100));
}
else // wenn kein Datensatz vorhanden ist => Meldung ausgeben
{
AfxMessageBox(_T("Für dieses Fahrzeug stehen noch keine Tankdaten zur Verfügung."));
m_TdDatum = COleDateTime::GetCurrentTime();
TdDay = m_TdDatum.GetDay();
TdMonth = m_TdDatum.GetMonth();
TdYear = m_TdDatum.GetYear();
m_TdDatum.SetDate(TdYear,TdMonth,TdDay);
}
frzset2.Close(); // RecordSet für Fahrzeugdaten schließen
return 0;
}
/////////////////////////////////////////////////////////////////////////////
// Wird beim Zeichnen des Dialogs ausgeführt
void CTankdatenView::OnPaint()
{
CPaintDC dc(this); // device context for painting
if (tdset2.GetAbsolutePosition() == -1) // wenn kein Datensatz vorhanden
{
m_TdNext.EnableWindow(FALSE);
m_TdPrev.EnableWindow(FALSE);
m_TdDelete.EnableWindow(FALSE);
m_TdEdit.EnableWindow(FALSE);
}
else
{
m_TdDelete.EnableWindow(TRUE);
m_TdEdit.EnableWindow(TRUE);
}
if (tdset2.GetAbsolutePosition() == 0) // wenn beim 1. Datensatz
{
m_TdPrev.EnableWindow(FALSE);
}
if (tdset2.GetAbsolutePosition() == tdanzahl) // wenn beim letzten Datensatz
{
m_TdNext.EnableWindow(FALSE);
}
} // OnPaint()
/////////////////////////////////////////////////////////////////////////////
// Wird beim "Schließen" des Dialogs ausgeführt
void CTankdatenView::OnKillFocus(CWnd* pNewWnd)
{
CDialog::OnKillFocus(pNewWnd);
tdset2.Close(); // RecordSet für Tankdaten schließen
db2.Close(); // Datenbank schließen
} // OnKillFocus()
/////////////////////////////////////////////////////////////////////////////
// Anlegen eines neuen Tankdaten-Datensatzes
void CTankdatenView::OnTankdatenCreate()
{
CString sql,status,msg; // locale CString-Variablen
int TdDay, TdMonth, TdYear; // Variablen für Datum/Zeit-Wandlung
long kmStand,TdID,lastkm; // long-Variablen für Felder
float Spritmenge,Kosten; // int-Variablen für Felder
BOOL fehler = 0; // Variable für Fehlerauswertung
COleVariant i_var; // Variable für Austausch mit RecSet (DB)
i_var.ChangeType(VT_R4, NULL);
GetDlgItemText(IDC_TankdatenCreate,status);
if (status=="Neu Anlegen") // In Neu Anlegen Modus wechseln
{
// Felder und Buttons auf Ausgangswerte setzten
UpdateData(TRUE);
m_TdDatum = COleDateTime::GetCurrentTime();
TdDay = m_TdDatum.GetDay();
TdMonth = m_TdDatum.GetMonth();
TdYear = m_TdDatum.GetYear();
m_TdDatum.SetDate(TdYear,TdMonth,TdDay);
m_TdID = 0;
m_TdStand = 0;
m_TdSpritmenge = 0;
m_TdKosten = 0;
m_TdAnmerkung = _T("");
m_TdNext.EnableWindow(FALSE);
m_TdPrev.EnableWindow(FALSE);
m_TdDatumC.SetReadOnly(FALSE);
m_TdStandC.SetReadOnly(FALSE);
m_TdSpritmengeC.SetReadOnly(FALSE);
m_TdKostenC.SetReadOnly(FALSE);
m_TdAnmerkungC.SetReadOnly(FALSE);
m_TdEdit.EnableWindow(FALSE);
m_TdDelete.EnableWindow(FALSE);
UpdateData(FALSE);
SetDlgItemText(IDC_TankdatenCreate,"Speichern");
}
else // Speichern und in Anzeigemodus wechseln
{
tdset2.AddNew(); // Neuen Datensatz am Ende des RecordSet anfügen
if (UpdateData(TRUE) == 0) return; // wenn UpdateData nicht erfolgreich Abbruch
msg = "Es wurden nicht alle Felder ausgefüllt:\n";
if (!m_TdDatum) // Fehler wenn keinDatum eingegeben wurde
{
msg += "- Tankdatum\n";
fehler = 1;
}
if (!m_TdStand) // Fehler wenn kein km-Stand eingegeben wurde
{
msg += "- kmStand\n";
fehler = 1;
}
if (!m_TdSpritmenge) // Fehler wenn keine Spritmenge eingegeben wurde
{
msg += "- Spritmenge\n";
fehler = 1;
}
if (!m_TdKosten) // Fehler wenn keine Kosten eingegeben wurde
{
msg += "- Kosten\n";
fehler = 1;
}
if (fehler) // Wenn Fehler, entsprechende Fehlermeldung ausgeben
{
AfxMessageBox(msg); // Fehlermeldung ausgeben
return;
}
// Daten in RecordSet schreiben
tdset2.SetFieldValue("Fahrzeug_ID",(long)searchID);
tdset2.SetFieldValue("Datum",m_TdDatum);
tdset2.SetFieldValue("kmStand",(long)m_TdStand);
tdset2.SetFieldValue("Spritmenge",(float)m_TdSpritmenge);
tdset2.SetFieldValue("Kosten",(float)m_TdKosten);
if ((CString)m_TdAnmerkung != "") tdset2.SetFieldValue("Anmerkung",(LPCSTR)m_TdAnmerkung);
// Felder und Buttons aktualisieren
UpdateData(FALSE);
kmStand = (long)m_TdStand;
Spritmenge = (float)m_TdSpritmenge;
Kosten = (float)m_TdKosten;
tdset2.Update(); // Datenbank mit RecordSet abgleichen
tdanzahl = tdanzahl + 1; // Anzahl der Datensätze um eins erhöhen
tdset2.MoveLast(); // gehe zum letzten Datensatz
AfxMessageBox(_T("Neue Tankdaten wurde angelegt."));
tdset2.GetFieldValue("Tank_ID",i_var); // Fahrzeug_ID aus RecSet auslesen
TdID = i_var.lVal;
if (tdset2.GetAbsolutePosition() > 0) // Wenn nicht auf ersten Datensatz
{
m_TdPrev.EnableWindow(TRUE); // Button << aktivieren
}
UpdateData(TRUE);
m_TdID = TdID;
if (tdset2.GetAbsolutePosition() > 0) // wenn nicht erster Datensatz
{
tdset2.MovePrev(); // gehe zum vorherigen Datensatz
tdset2.GetFieldValue("kmStand",i_var); // lese km-Stand aus
lastkm = (long)i_var.lVal; // km-Stand als vorheriger km-Stand setzen
tdset2.MoveNext(); // gehe wieder zum nächsten Datensatz
}
else // wenn auf erstem Datensatz wir km-Stand aus Fahrzeugdaten gelesen
{
sql.Format(_T("SELECT * FROM Fahrzeugdaten WHERE Fahrzeug_ID = %d"),searchID);
frzset2.Open(AFX_DAO_USE_DEFAULT_TYPE,sql,NULL); // öffnen des Fahrzeug-RecordSet
frzset2.GetFieldValue("kmStand",i_var); // km-Stand auslesen
lastkm = (long)i_var.lVal; // km-Stand als vorheriger km-Stand setzen
frzset2.Close(); // Fahrzeug-RecordSet schließen
}
// Statistikwerte ausgeben
m_TdStat_Preis.Format(_T("%5.2f €"),(Kosten/Spritmenge));
m_TdStat_km.Format(_T("%d km"),(kmStand-lastkm));
m_TdStat_Verbrauch.Format(_T("%5.2f l"),(Spritmenge/(kmStand-lastkm)*100));
m_TdStat_Kosten.Format(_T("%5.2f €"),(Kosten/(kmStand-lastkm)*100));
// Felder auf nur lesbar schalten
m_TdDatumC.SetReadOnly(TRUE);
m_TdStandC.SetReadOnly(TRUE);
m_TdSpritmengeC.SetReadOnly(TRUE);
m_TdKostenC.SetReadOnly(TRUE);
m_TdAnmerkungC.SetReadOnly(TRUE);
m_TdEdit.EnableWindow(TRUE);
m_TdDelete.EnableWindow(TRUE);
UpdateData(FALSE);
SetDlgItemText(IDC_TankdatenCreate,"Neu Anlegen");
}
} // OnTankdatenCreate()
/////////////////////////////////////////////////////////////////////////////
// Einen vorhandenen Tankdaten-Datensatz editieren
void CTankdatenView::OnTankdatenEdit()
{
CString sql,status,msg; // locale CString-Variablen
long kmStand,lastkm; // int-Variablen
float Spritmenge,Kosten; // float-Variablen
BOOL fehler = 0; // Variable für die locale Fehlerauswertung
COleVariant i_var; // Variable für Austausch mit RecSet (DB)
i_var.ChangeType(VT_R4, NULL);
GetDlgItemText(IDC_TankdatenEdit,status);
if (status=="Ändern") // In Editiermodus wechseln
{
// Felder auf editierbar stellen
m_TdDatumC.SetReadOnly(FALSE);
m_TdStandC.SetReadOnly(FALSE);
m_TdSpritmengeC.SetReadOnly(FALSE);
m_TdKostenC.SetReadOnly(FALSE);
m_TdAnmerkungC.SetReadOnly(FALSE);
SetDlgItemText(IDC_TankdatenEdit,"Speichern");
}
else // Speichern und in Anzeigemodus wechseln
{
if (UpdateData(TRUE) == 0) return; // wenn UpdateData nicht erfolgreich Abbruch
msg = "Es wurden nicht alle Felder ausgefüllt:\n";
if (!m_TdDatum) // Fehler wenn keinDatum eingegeben wurde
{
msg += "- Tankdatum\n";
fehler = 1;
}
if (!m_TdStand) // Fehler wenn kein km-Stand eingegeben wurde
{
msg += "- kmStand\n";
fehler = 1;
}
if (!m_TdSpritmenge) // Fehler wenn keine Spritmenge eingegeben wurde
{
msg += "- Spritmenge\n";
fehler = 1;
}
if (!m_TdKosten) // Fehler wenn keine Kosten eingegeben wurde
{
msg += "- Kosten\n";
fehler = 1;
}
if (fehler) // Wenn Fehler, entsprechende Fehlermeldung ausgeben
{
AfxMessageBox(msg); // Fehlermeldung ausgeben
return;
}
tdset2.Edit(); // RecordSet mit Felddaten abgleichen
// RecordSet mit Felddaten abgleichen
tdset2.SetFieldValue("Datum",m_TdDatum);
tdset2.SetFieldValue("kmStand",(long)m_TdStand);
tdset2.SetFieldValue("Spritmenge",(float)m_TdSpritmenge);
tdset2.SetFieldValue("Kosten",(float)m_TdKosten);
kmStand = (long)m_TdStand;
Spritmenge = (float)m_TdSpritmenge;
Kosten = (float)m_TdKosten;
if ((CString)m_TdAnmerkung != "") tdset2.SetFieldValue("Anmerkung",(LPCSTR)m_TdAnmerkung);
else tdset2.SetFieldValueNull("Anmerkung");
tdset2.Update(); // Datenbank mit RecordSet abgleichen
if (tdset2.GetAbsolutePosition() > 0) // wenn nicht erster Datensatz
{
tdset2.MovePrev(); // gehe zum vorherigen Datensatz
tdset2.GetFieldValue("kmStand",i_var); // lese km-Stand aus
lastkm = (long)i_var.lVal; // km-Stand als vorheriger km-Stand setzen
tdset2.MoveNext(); // gehe wieder zum nächsten Datensatz
}
else // wenn auf erstem Datensatz wir km-Stand aus Fahrzeugdaten gelesen
{
sql.Format(_T("SELECT * FROM Fahrzeugdaten WHERE Fahrzeug_ID = %d"),searchID);
frzset2.Open(AFX_DAO_USE_DEFAULT_TYPE,sql,NULL); // öffnen des Fahrzeug-RecordSet
frzset2.GetFieldValue("kmStand",i_var); // km-Stand auslesen
lastkm = (long)i_var.lVal; // km-Stand als vorheriger km-Stand setzen
frzset2.Close(); // Fahrzeug-RecordSet schließen
}
// Statistikwerte ausgeben
m_TdStat_Preis.Format(_T("%5.2f €"),(Kosten/Spritmenge));
m_TdStat_km.Format(_T("%d km"),(kmStand-lastkm));
m_TdStat_Verbrauch.Format(_T("%5.2f l"),(Spritmenge/(kmStand-lastkm)*100));
m_TdStat_Kosten.Format(_T("%5.2f €"),(Kosten/(kmStand-lastkm)*100));
// Felder auf nur lesbar setzen
m_TdDatumC.SetReadOnly(TRUE);
m_TdStandC.SetReadOnly(TRUE);
m_TdSpritmengeC.SetReadOnly(TRUE);
m_TdKostenC.SetReadOnly(TRUE);
m_TdAnmerkungC.SetReadOnly(TRUE);
UpdateData(FALSE);
OnPaint(); // Button aktualisieren
AfxMessageBox(_T("Tankdatendaten wurde geändert."));
SetDlgItemText(IDC_TankdatenEdit,"Ändern");
}
} // OnTankdatenEdit()
/////////////////////////////////////////////////////////////////////////////
// Im RecordSet einen Tankdaten-Datensatz nach vorne gehen
void CTankdatenView::OnTankdatenNext()
{
CString Anmerkung; // String-Variablen für Felder
COleDateTime Datum; // Variable für Datumsausgabe
long kmStand,TdID,lastkm; // long-Variablen für Felder
float Spritmenge,Kosten; // int-Variablen für Felder
COleVariant var,i_var,d_var; // Variablen für den Datenaustausch mit der DB
var.ChangeType(VT_BSTR, NULL);
i_var.ChangeType(VT_I4, NULL);
d_var.ChangeType(VT_DATE, NULL);
tdset2.MoveNext(); // gehe zum nächsten Datensatz
if (tdanzahl == tdset2.GetAbsolutePosition()) // wenn beim letzten Datensatz Button >> deaktivieren
{
m_TdNext.EnableWindow(FALSE);
}
// Werte aus dem RecordSet auslesen
tdset2.GetFieldValue("Tank_ID",i_var);
TdID = (long)i_var.lVal;
tdset2.GetFieldValue("Datum",d_var);
Datum = COleDateTime(d_var);
tdset2.GetFieldValue("kmStand",i_var);
kmStand = (long)i_var.lVal;
tdset2.GetFieldValue("Spritmenge",i_var);
Spritmenge = (float)i_var.dblVal;
tdset2.GetFieldValue("Kosten",i_var);
Kosten = (float)i_var.dblVal;
tdset2.GetFieldValue("Anmerkung",var);
if (var.vt != 1) Anmerkung = (LPCSTR)var.pbstrVal;
// Felder und Buttons aktualisieren
UpdateData(TRUE);
m_TdDatum = Datum;
m_TdStand = kmStand;
m_TdSpritmenge = Spritmenge;
m_TdKosten = Kosten;
m_TdAnmerkung = Anmerkung;
m_TdID = TdID;
tdset2.MovePrev(); // gehe zum vorherigen Datensatz
tdset2.GetFieldValue("kmStand",i_var); // lese km-Stand aus
lastkm = (long)i_var.lVal; // km-Stand als vorheriger km-Stand setzen
tdset2.MoveNext(); // gehe wieder zum nächsten Datensatz
// Statistikwerte ausgeben
m_TdStat_Preis.Format(_T("%5.2f €"),(Kosten/Spritmenge));
m_TdStat_km.Format(_T("%d km"),(kmStand-lastkm));
m_TdStat_Verbrauch.Format(_T("%5.2f l"),(Spritmenge/(kmStand-lastkm)*100));
m_TdStat_Kosten.Format(_T("%5.2f €"),(Kosten/(kmStand-lastkm)*100));
m_TdPrev.EnableWindow(TRUE);
UpdateData(FALSE);
} // OnTankdatenNext()
/////////////////////////////////////////////////////////////////////////////
// Im RecordSet einen Tankdaten-Datensatz nach hinten gehen
void CTankdatenView::OnTankdatenPrev()
{
CString sql; // locale CString-Variablen
CString Anmerkung; // String-Variablen für Felder
COleDateTime Datum; // Variable für Datumsausgabe
long kmStand,TdID,lastkm; // long-Variablen für Felder
float Spritmenge,Kosten; // int-Variablen für Felder
COleVariant var,i_var,d_var; // Variablen für den Datenaustausch mit der DB
var.ChangeType(VT_BSTR, NULL);
i_var.ChangeType(VT_I4, NULL);
d_var.ChangeType(VT_DATE, NULL);
tdset2.MovePrev(); // gehe zum vorherigen Datensatz
if (tdset2.GetAbsolutePosition() == 0) // wenn beim ersten Datensatz Button << deaktivieren
{
m_TdPrev.EnableWindow(FALSE);
}
// Werte aus dem RecordSet auslesen
tdset2.GetFieldValue("Tank_ID",i_var);
TdID = (long)i_var.lVal;
tdset2.GetFieldValue("Datum",d_var);
Datum = COleDateTime(d_var);
tdset2.GetFieldValue("kmStand",i_var);
kmStand = (long)i_var.lVal;
tdset2.GetFieldValue("Spritmenge",i_var);
Spritmenge = (float)i_var.dblVal;
tdset2.GetFieldValue("Kosten",i_var);
Kosten = (float)i_var.dblVal;
tdset2.GetFieldValue("Anmerkung",var);
if (var.vt != 1) Anmerkung = (LPCSTR)var.pbstrVal;
// Felder und Buttons aktualisieren
UpdateData(TRUE);
m_TdDatum = Datum;
m_TdStand = kmStand;
m_TdSpritmenge = Spritmenge;
m_TdKosten = Kosten;
m_TdAnmerkung = Anmerkung;
m_TdID = TdID;
if (tdset2.GetAbsolutePosition() > 0) // wenn nicht erster Datensatz
{
tdset2.MovePrev(); // gehe zum vorherigen Datensatz
tdset2.GetFieldValue("kmStand",i_var); // lese km-Stand aus
lastkm = (long)i_var.lVal; // km-Stand als vorheriger km-Stand setzen
tdset2.MoveNext(); // gehe wieder zum nächsten Datensatz
}
else // wenn auf erstem Datensatz wir km-Stand aus Fahrzeugdaten gelesen
{
sql.Format(_T("SELECT * FROM Fahrzeugdaten WHERE Fahrzeug_ID = %d"),searchID);
frzset2.Open(AFX_DAO_USE_DEFAULT_TYPE,sql,NULL); // öffnen des Fahrzeug-RecordSet
frzset2.GetFieldValue("kmStand",i_var); // km-Stand auslesen
lastkm = (long)i_var.lVal; // km-Stand als vorheriger km-Stand setzen
frzset2.Close(); // Fahrzeug-RecordSet schließen
}
// Statistikwerte ausgeben
m_TdStat_Preis.Format(_T("%5.2f €"),(Kosten/Spritmenge));
m_TdStat_km.Format(_T("%d km"),(kmStand-lastkm));
m_TdStat_Verbrauch.Format(_T("%5.2f l"),(Spritmenge/(kmStand-lastkm)*100));
m_TdStat_Kosten.Format(_T("%5.2f €"),(Kosten/(kmStand-lastkm)*100));
m_TdNext.EnableWindow(TRUE);
UpdateData(FALSE);
} // OnTankdatenPrev()
/////////////////////////////////////////////////////////////////////////////
// Ein Tankdaten aus der Datenbank löschen (Tankdaten werden auch gelöscht)
void CTankdatenView::OnTankdatenDelete()
{
CString sql,lDatum; // locale CString-Variablen
int msg; // Variable für die Abfrage der Messagebox
CString Anmerkung; // String-Variablen für Felder
COleDateTime Datum; // Variable für Datumsausgabe
long kmStand,TdID,lastkm; // long-Variablen für Felder
float Spritmenge,Kosten; // int-Variablen für Felder
int TdDay, TdMonth, TdYear; // Variablen für Datum/Zeit-Wandlung
COleVariant var,i_var,d_var; // Variablen für den Datenaustausch mit der DB
var.ChangeType(VT_BSTR, NULL);
i_var.ChangeType(VT_I4, NULL);
d_var.ChangeType(VT_DATE, NULL);
GetDlgItemText(IDC_TdDatum,lDatum); // Datum des Datensatzes auslesen
msg = AfxMessageBox(_T("Sollen die Tankdaten vom " + lDatum +" wirklich gelöscht werden?"),MB_OKCANCEL);
if (msg == 1) // Wenn Meldung mit OK bestätigt, wird der Datensatz gelöscht
{
tdset2.Delete(); // aktuellen Datensatz löschen
tdanzahl = tdanzahl - 1 ; // Anzahl der Tankdaten um eins verringern
if (tdanzahl > 0) // wenn noch Daten vorhanden sind, entsprechende Werte ausgeben
{
tdset2.MoveLast(); // gehe zum letzten Datensatz
// Werte aus dem RecordSet auslesen
tdset2.GetFieldValue("Tank_ID",i_var);
TdID = (long)i_var.lVal;
tdset2.GetFieldValue("Datum",d_var);
Datum = COleDateTime(d_var);
tdset2.GetFieldValue("kmStand",i_var);
kmStand = (long)i_var.lVal;
tdset2.GetFieldValue("Spritmenge",i_var);
Spritmenge = (float)i_var.dblVal;
tdset2.GetFieldValue("Kosten",i_var);
Kosten = (float)i_var.dblVal;
tdset2.GetFieldValue("Anmerkung",var);
if (var.vt != 1) Anmerkung = (LPCSTR)var.pbstrVal;
if (tdset2.GetAbsolutePosition() > 0) // wenn nicht erster Datensatz
{
tdset2.MovePrev(); // gehe zum vorherigen Datensatz
tdset2.GetFieldValue("kmStand",i_var); // lese km-Stand aus
lastkm = (long)i_var.lVal; // km-Stand als vorheriger km-Stand setzen
tdset2.MoveNext(); // gehe wieder zum nächsten Datensatz
}
else // wenn auf erstem Datensatz wir km-Stand aus Fahrzeugdaten gelesen
{
sql.Format(_T("SELECT * FROM Fahrzeugdaten WHERE Fahrzeug_ID = %d"),searchID);
frzset2.Open(AFX_DAO_USE_DEFAULT_TYPE,sql,NULL); // öffnen des Fahrzeug-RecordSet
frzset2.GetFieldValue("kmStand",i_var); // km-Stand auslesen
lastkm = (long)i_var.lVal; // km-Stand als vorheriger km-Stand setzen
frzset2.Close(); // Fahrzeug-RecordSet schließen
}
// Statistikwerte ausgeben
UpdateData(TRUE);
m_TdStat_Preis.Format(_T("%5.2f €"),(Kosten/Spritmenge));
m_TdStat_km.Format(_T("%d km"),(kmStand-lastkm));
m_TdStat_Verbrauch.Format(_T("%5.2f l"),(Spritmenge/(kmStand-lastkm)*100));
m_TdStat_Kosten.Format(_T("%5.2f €"),(Kosten/(kmStand-lastkm)*100));
UpdateData(FALSE);
}
else// Wenn kein Datensatz vorhanden, entsprechende Ausgabe der Felder
{
TdID = 0;
Datum = COleDateTime::GetCurrentTime(); // Datum auf heute setzen
TdDay = m_TdDatum.GetDay();
TdMonth = m_TdDatum.GetMonth();
TdYear = m_TdDatum.GetYear();
Datum.SetDate(TdYear,TdMonth,TdDay);
kmStand = 0;
Spritmenge = 0;
Kosten = 0;
Anmerkung = "keine Tankdaten vorhanden !";
UpdateData(TRUE);
m_TdStat_Preis.Format(_T(" €"));
m_TdStat_km.Format(_T(" km"));
m_TdStat_Verbrauch.Format(_T(" l"));
m_TdStat_Kosten.Format(_T(" €"));
UpdateData(FALSE);
}
OnPaint(); // Button aktualisieren
// Felder und Buttons aktualisieren
UpdateData(TRUE);
m_TdDatum = Datum;
m_TdStand = kmStand;
m_TdSpritmenge = Spritmenge;
m_TdKosten = Kosten;
m_TdAnmerkung = Anmerkung;
m_TdID = TdID;
m_TdPrev.EnableWindow(TRUE);
m_TdDatumC.SetReadOnly(TRUE);
m_TdStandC.SetReadOnly(TRUE);
m_TdSpritmengeC.SetReadOnly(TRUE);
m_TdKostenC.SetReadOnly(TRUE);
m_TdAnmerkungC.SetReadOnly(TRUE);
UpdateData(FALSE);
}
} // OnTankdatenDelete()