// Set up SQL query
AnsiString SQLStr = "SELECT Production.MachineDate, Production.Machine, Production.MachineShift,";
SQLStr += " PurchaseHeading.CustomCutFlag, Production.ExportDomestic, Production.ParcelNumber,";
SQLStr += " Production.CutCode, Production.Specie, SUM(Production.Bdft) AS Bdft,";
SQLStr += " SUM(Production.SquareFeet) AS SquareFeet, SUM(Production.SquareMeters) AS SquareMeters, COUNT(*) AS LogCount";
SQLStr += " FROM Production Production LEFT OUTER JOIN";
SQLStr += " PurchasedLogs PurchasedLogs ON Production.LogNumber = PurchasedLogs.LogNumber LEFT OUTER JOIN";
SQLStr += " PurchaseHeading PurchaseHeading ON PurchasedLogs.PurchaseNumber = PurchaseHeading.PurchaseNumber";
SQLStr += " LEFT OUTER JOIN WIP WIP ON Production.ProductionNumber = WIP.ProductionNumber";
SQLStr += " WHERE (Production.MachineDate >= CONVERT(DATETIME, '" + SelectedDateStr + "', 102)) AND";
SQLStr += " (Production.MachineDate <= CONVERT(DATETIME,'" + SelectedDateStr + " 23:59:59.000', 102))";
if (ParcelListBox->Items->Count > 0) // Get excluded parcels
{
for (int j = 0; j < ParcelListBox->Items->Count; ++j)
{
AnsiString XParcelStr = ParcelListBox->Items->Strings[j];
SQLStr += " AND (Production.ParcelNumber <> '" + XParcelStr + "')";
}
} // Get excluded parcels
SQLStr += " AND (WIP.Mill = '" + MillStr + "')";
SQLStr += " GROUP BY Production.MachineDate, Production.Machine, Production.MachineShift, PurchaseHeading.CustomCutFlag,";
SQLStr += " Production.ExportDomestic, Production.ParcelNumber, Production.CutCode, Production.Specie";
try
{
// See if there are records already in Production Summary
int ProdSumRecInt = ProductionSummaryADODataSet->RecordCount;
if (ProdSumRecInt != 0)
{
Application->MessageBox("Records for this date already exists in Production Summary.", "Data Error", MB_OK);
ProcessStaticText->Caption = "Records already exists!";
return;
}
// If we don't have records, add them
ProductionADODataSet->Close();
ProductionADODataSet->CommandText = SQLStr;
if (!ProductionADODataSet->Prepared) ProductionADODataSet->Prepared = true;
ProductionADODataSet->Open();
int NumSQLRecInt = ProductionADODataSet->RecordCount;
if (NumSQLRecInt > 0) // We have records to process
{
ProcessStaticText->Caption = "Updating the production summary . . .";
ProductionADODataSet->First();
for (int j = 0; j < NumSQLRecInt; ++j) // Collect each record
{
TDateTime MachineDate = ProductionADODataSet->FieldByName("MachineDate")->AsDateTime;
AnsiString MachineStr = ProductionADODataSet->FieldByName("Machine")->AsString;
AnsiString MachineShiftStr = ProductionADODataSet->FieldByName("MachineShift")->AsString;
AnsiString CCFlagStr = ProductionADODataSet->FieldByName("CustomCutFlag")->AsString;
AnsiString MarketStr = ProductionADODataSet->FieldByName("ExportDomestic")->AsString;
AnsiString ParcelStr = ProductionADODataSet->FieldByName("ParcelNumber")->AsString;
AnsiString CutStr = ProductionADODataSet->FieldByName("CutCode")->AsString;
AnsiString SpecieCodeStr = ProductionADODataSet->FieldByName("Specie")->AsString;
int BFInt = ProductionADODataSet->FieldByName("BdFt")->AsInteger;
int SFInt = ProductionADODataSet->FieldByName("SquareFeet")->AsInteger;
double SMFlt = ProductionADODataSet->FieldByName("SquareMeters")->AsFloat;
int LogCountInt = ProductionADODataSet->FieldByName("LogCount")->AsInteger;
// Set up Market
if (MarketStr != "X" && (CutStr == "X" || CutStr == "B")) MarketStr = "X";
if (CCFlagStr == "1") MarketStr = "C";
// Insert data into summary table
AnsiString MsgStr = "Processing machine " + MachineStr + " . . . ";
Application->ProcessMessages();
ProductionSummaryADODataSet->Append(); // Insert and Append adds a new record while Update changes the current record
ProcessStaticText->Caption = MsgStr;
ProductionSummaryADODataSet->FieldByName("Machine")->AsString = MachineStr;
ProductionSummaryADODataSet->FieldByName("MachineDate")->AsDateTime = MachineDate;
ProductionSummaryADODataSet->FieldByName("Shift")->AsString = MachineShiftStr;
ProductionSummaryADODataSet->FieldByName("ParcelNumber")->AsString = ParcelStr;
ProductionSummaryADODataSet->FieldByName("SpecieCode")->AsString = SpecieCodeStr;
ProductionSummaryADODataSet->FieldByName("CutCode")->AsString = CutStr;
ProductionSummaryADODataSet->FieldByName("Market")->AsString = MarketStr;
ProductionSummaryADODataSet->FieldByName("SquareMeters")->AsFloat = SMFlt;
ProductionSummaryADODataSet->FieldByName("SquareFeet")->AsInteger = SFInt;
ProductionSummaryADODataSet->FieldByName("LogCount")->AsInteger = LogCountInt;
ProductionSummaryADODataSet->FieldByName("Hours")->AsString = "0";
if (CutStr == "B")
{
ProductionSummaryADODataSet->FieldByName("Pounds")->AsInteger = BFInt;
ProductionSummaryADODataSet->FieldByName("BdFt")->AsInteger = 0;
}
else
{
ProductionSummaryADODataSet->FieldByName("BdFt")->AsInteger = BFInt;
ProductionSummaryADODataSet->FieldByName("Pounds")->AsInteger = 0;
}
ProductionSummaryADODataSet->Post(); // NEEDED!!!!!!!
ProductionADODataSet->Next();
} // Collect each record
// Fini
ProductionSummaryADODataSet->Open();
} // We have records to process
else Application->MessageBox("No production records found.", "0 Records", MB_OK);
}
catch ( ... )
{
Application->MessageBox("Error running SQL command!", "Data Set Error", MB_OK);
}
// Done!
ProcessStaticText->Caption = "Done!";
ParcelListBox->Clear();
ProductionADODataSet->Close();