对于我的实习,我正在使用C ++构建器开发一个简单的仅Windows的应用程序12.
该应用程序用于使用接口进行一些简单的碎屑。我正在使用SQLite作为数据库,也将FireDac作为数据库,尽管这可能无关紧要。
该应用程序分为2个主要菜单,其中一个似乎不遵守相同的规则。
当我单击“ Nouvelle Rallonge”(新扩展名)或“ Nouveau Tube”(New Tube)时,我将调用另一个窗口以及右表上的
Append()
,然后填充所需字段I
Post()
iT.问题是Append()
行动很奇怪。在该应用程序的其余部分中,它按预期工作。但是在这里,它获得了数据库中已经存在的条目的值(在
TDBGrid
中显示),我可以对其进行修改,但我无法创建一个新的条目。
i使用相同的窗口“架构”(即:使用
TDBEdit
在这里是导致问题的代码:
2nd主页://---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "menuApp.h"
#include "menuRallonges.h"
#include "datamodule.h"
#include "gestionRallonge.h"
#include "gestionTube.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFMenuRallonges *FMenuRallonges;
extern bool isEditing;
//---------------------------------------------------------------------------
__fastcall TFMenuRallonges::TFMenuRallonges(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TFMenuRallonges::btRallongeClick(TObject *Sender)
{
TFRallonge *FRallonge = new TFRallonge(this);
short res = FRallonge->ShowModal();
delete FRallonge;
}
//---------------------------------------------------------------------------
void __fastcall TFMenuRallonges::btTubeClick(TObject *Sender)
{
TFTube *FTube = new TFTube(this);
short res = FTube->ShowModal();
delete FTube;
}
//---------------------------------------------------------------------------
void __fastcall TFMenuRallonges::FormShow(TObject *Sender)
{
DataModule1 = new TDataModule1(this);
isEditing=false;
DBGrid1->DataSource->DataSet->Refresh();
DBGrid2->DataSource->DataSet->Refresh();
}
//---------------------------------------------------------------------------
void __fastcall TFMenuRallonges::btModifRallongeClick(TObject *Sender)
{
isEditing=true;
btRallongeClick(this);
FormShow(this);
}
//---------------------------------------------------------------------------
void __fastcall TFMenuRallonges::btModifTubeClick(TObject *Sender)
{
isEditing=true;
btTubeClick(this);
FormShow(this);
}
//---------------------------------------------------------------------------
void __fastcall TFMenuRallonges::FormDestroy(TObject *Sender)
{
if (DataModule1 != nullptr)
{
delete DataModule1;
DataModule1 = nullptr;
}
}
//---------------------------------------------------------------------------
void __fastcall TFMenuRallonges::FormClose(TObject *Sender, TCloseAction &Action)
{
FormDestroy(this);
}
//---------------------------------------------------------------------------
管页面:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "datamodule.h"
#include "menuRallonges.h"
#include "gestionTube.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFTube *FTube;
extern bool isEditing;
//---------------------------------------------------------------------------
__fastcall TFTube::TFTube(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TFTube::Button1Click(TObject *Sender)
{
Button1->SetFocus();
try {
DataModule1->TubevideTable->Post();
}
catch (const Exception &E) {
ShowMessage("Erreur lors de l'insertion : " + E.Message);
}
}
//---------------------------------------------------------------------------
void __fastcall TFTube::FormShow(TObject *Sender)
{
if (isEditing==true) {
// ShowMessage("editing true");
}
else
{
// ShowMessage("editing false");
// DataModule1->TubevideTable->Last();
DataModule1->TubevideTable->Append();
}
}
//---------------------------------------------------------------------------
void __fastcall TFTube::Button2Click(TObject *Sender)
{
DataModule1->TubevideTable->Cancel();
}
//---------------------------------------------------------------------------
我真的不知道是什么原因造成的,所以如果您有任何想法,请告诉我。
@@remylebeau说,创建datamodule1的新实例是可疑的。即使在另一页上运行良好,我真的不知道为什么,但另一方面它导致了本文的错误。我只是从功能中删除了线,现在一切都很好,谢谢大家!