Problem w tym że bardzo często przeskakuje pomiędzy tabelami i czasem wykonanie bardziej złożonego kodu (tak jak poniżej) ale na 5 tabelach po kolei zajmuje nawet 20 sek.
Czy da rade to jakoś przyspieszyć ? Nie mam zbyt dużej wiedzy na temat baz danych w Builderze. Może powinienem inaczej rozwiązać swój problem, może używać innych komponentów. Proszę o pomoc.
KOD cpp: UKRYJ
void ReadWriteMessage(String SectionName, TMemo * Memo, bool Write)
{
if(Write)
{
BaseForm->m_SQLDataSet->CommandText = "SELECT * FROM tmt_messages";
BaseForm->m_SQLDataSet->Open();
for(int i=0;i<BaseForm->m_SQLDataSet->RecordCount;i++)
{
if(BaseForm->m_SQLDataSet->FindField("sekcja")->AsString == SectionName)
{
BaseForm->SQLQuery->CommandText = "UPDATE tmt_messages SET text = '" + Memo->Lines->Text + "' WHERE sekcja = '" + SectionName + "'";
BaseForm->SQLQuery->ExecSQL(true);
BaseForm->m_SQLDataSet->Close();
return;
}
BaseForm->m_SQLDataSet->Next();
}
BaseForm->SQLQuery->CommandText = "INSERT INTO tmt_messages (sekcja) VALUES ('" + SectionName + "')";
BaseForm->SQLQuery->ExecSQL(true);
BaseForm->SQLQuery->CommandText = "UPDATE tmt_messages SET text = '" + Memo->Lines->Text + "' WHERE sekcja = '" + SectionName + "'";
BaseForm->SQLQuery->ExecSQL(true);
}
else
{
BaseForm->m_SQLDataSet->CommandText = "SELECT * FROM tmt_messages";
BaseForm->m_SQLDataSet->Open();
for(int i=0;i<BaseForm->m_SQLDataSet->RecordCount;i++)
{
if(BaseForm->m_SQLDataSet->FindField("sekcja")->AsString == SectionName)
{
Memo->Lines->Text = BaseForm->m_SQLDataSet->FindField("text")->AsString;
BaseForm->m_SQLDataSet->Close();
return;
}
BaseForm->m_SQLDataSet->Next();
}
}
BaseForm->m_SQLDataSet->Close();
}
{
if(Write)
{
BaseForm->m_SQLDataSet->CommandText = "SELECT * FROM tmt_messages";
BaseForm->m_SQLDataSet->Open();
for(int i=0;i<BaseForm->m_SQLDataSet->RecordCount;i++)
{
if(BaseForm->m_SQLDataSet->FindField("sekcja")->AsString == SectionName)
{
BaseForm->SQLQuery->CommandText = "UPDATE tmt_messages SET text = '" + Memo->Lines->Text + "' WHERE sekcja = '" + SectionName + "'";
BaseForm->SQLQuery->ExecSQL(true);
BaseForm->m_SQLDataSet->Close();
return;
}
BaseForm->m_SQLDataSet->Next();
}
BaseForm->SQLQuery->CommandText = "INSERT INTO tmt_messages (sekcja) VALUES ('" + SectionName + "')";
BaseForm->SQLQuery->ExecSQL(true);
BaseForm->SQLQuery->CommandText = "UPDATE tmt_messages SET text = '" + Memo->Lines->Text + "' WHERE sekcja = '" + SectionName + "'";
BaseForm->SQLQuery->ExecSQL(true);
}
else
{
BaseForm->m_SQLDataSet->CommandText = "SELECT * FROM tmt_messages";
BaseForm->m_SQLDataSet->Open();
for(int i=0;i<BaseForm->m_SQLDataSet->RecordCount;i++)
{
if(BaseForm->m_SQLDataSet->FindField("sekcja")->AsString == SectionName)
{
Memo->Lines->Text = BaseForm->m_SQLDataSet->FindField("text")->AsString;
BaseForm->m_SQLDataSet->Close();
return;
}
BaseForm->m_SQLDataSet->Next();
}
}
BaseForm->m_SQLDataSet->Close();
}
Przyjmijmy że wykonuje trochę więcej operacji i poruszam się przy tym przechodząc przez 5 różnych tabel wykonanie trwa 20-30 sek.
Baza jest MySQL'owa, używam kontrolek dbExpress.