aplikacija bazirana na access bazi radi rezervacije apartmana.kako da prilikom update-a tj.stvaranja nove rezervacije ispitam dali je apartman u tom periodu(izmedju dva datuma) već zauzet?
Update i vremenski period
Zaključano
Zakačeno
Napravis proceduru na bazi sa sledecim kodom
I pozoves proceduru iz koda ako vrati 0 znaci da je termin zauzet...
Code:
CREATE PROCEDURE UnesiRezervaciju
(
@Pocetni DateTime,
@Krajnji DateTime,
@Uspelo bit output,
--ostali parametri potrebni za unos apartmana u bazu
)
AS
IF NOT EXISTS (SELECT * FROM Apartmani WHERE IDApartmana BETWEEN @Pocetni AND @Krajnji)
BEGIN
INSET INTO Apartmani VALUES (-- potrebni parametri)
@Uspelo = 1
END
ELSE
@Uspelo = 0
CREATE PROCEDURE UnesiRezervaciju
(
@Pocetni DateTime,
@Krajnji DateTime,
@Uspelo bit output,
--ostali parametri potrebni za unos apartmana u bazu
)
AS
IF NOT EXISTS (SELECT * FROM Apartmani WHERE IDApartmana BETWEEN @Pocetni AND @Krajnji)
BEGIN
INSET INTO Apartmani VALUES (-- potrebni parametri)
@Uspelo = 1
END
ELSE
@Uspelo = 0
I pozoves proceduru iz koda ako vrati 0 znaci da je termin zauzet...
Potpis
Every hamster has his day.
Trudio sam se sa procedurom i nije islo.Onda sam na stranici http://www.devcity.net/Articles/18/1/msaccess_sp.aspx
pronasao da MS Access bas ne radi dobro sa svim procedurama.
Kako bi se još moglo ovo rijesiti. Da li je moguce podatke tipa datetime potrpati u nekekvo polje i onda testirati da li je datum vec zauzet.kako bi to otprilike islo ako je moguce?
pronasao da MS Access bas ne radi dobro sa svim procedurama.
Kako bi se još moglo ovo rijesiti. Da li je moguce podatke tipa datetime potrpati u nekekvo polje i onda testirati da li je datum vec zauzet.kako bi to otprilike islo ako je moguce?
izmenjeno 1 put, poslednji put Fedya 16.01.2006. u 15:37
Izmene poruke
- Fedya16.01.2006. u 15:37zapis iz teksta poruke
Sorry, nisam primetio da je Access u pitanju.
Bez procedura teško da ćeš moći da proveriš vrednosti unesene direktno u tabelu. Verovatno će biti najbolje rešenje da ispravnost proveriš u klijentskoj aplikaciji.
Npr. odradiš query koji ti vraća rezervaciju datog apartmana u dato vreme pa ako vrati bilo šta znači da je termin zauzet i na klijentu ispisuješ poruku.
Bez procedura teško da ćeš moći da proveriš vrednosti unesene direktno u tabelu. Verovatno će biti najbolje rešenje da ispravnost proveriš u klijentskoj aplikaciji.
Npr. odradiš query koji ti vraća rezervaciju datog apartmana u dato vreme pa ako vrati bilo šta znači da je termin zauzet i na klijentu ispisuješ poruku.
Potpis
Every hamster has his day.
u pravu je Fedya. Znaci pre ubacivanja prodješ kroz bazu i vidis da li postoji vec taj unos.
na kraju krajeva mozes vratiti podatke u DataSet i onda mozes proci kroz taj DataSet obicnom petljom videti da li ima mogucnosti da se ubace podatci i to ti je to.
znaci prvo proveris i onda pozoves update ili ako je rezervisan onda i ne zoves taj metod vec javis korsiniku da je zauzet
na kraju krajeva mozes vratiti podatke u DataSet i onda mozes proci kroz taj DataSet obicnom petljom videti da li ima mogucnosti da se ubace podatci i to ti je to.
znaci prvo proveris i onda pozoves update ili ako je rezervisan onda i ne zoves taj metod vec javis korsiniku da je zauzet
Potpis
Da, ok je to - mada je moja ideja više bila da pusti precizno definisan upit sa traženim podacima i da proveri sa IF EXISTS (verovatno postoji tako nešto u Access-u); time se minimizuje količina podataka koja putuje do klijenta i nema neke preterane obrade.
Potpis
Every hamster has his day.
Evo rijesio sam stvar na nacin da sam stvorio jos jedan adapter koji puni jos jedan dataset.I iz tog seta saljem korisniku poruku o apartmanima koji su zauzeti u periodu u kojem on pokusava stvoriti novu rezervaciju.Najveca mana je to sto korisnik jos uvijek moze naparaviti rezervaciju iako je neki apartman u tom periodu vec zauzet.Dobiva upozorenje ali ga uvijek moze ignorirati.
Evo kod pa ako imate jos koju ideju sta bi se tu moglo napraviti.
Hvala unaprijed.I hvala za vec pruzenu pomoc.
richTextBox3.ResetText();
string RezervacijaSelect = "Select * from Rezervacija where ? between DatumDolaska and DatumOdlaska
or ? between DatumDolaska and DatumOdlaska
or DatumDolaska between ? and ?
or DatumOdlaska between ? and ?";
OleDbDataAdapter adapter = new OleDbDataAdapter(RezervacijaSelect, rezervacijaTableAdapter.Connection);
OleDbParameter paramDatum = new OleDbParameter();
paramDatum.OleDbType = OleDbType.Date;
paramDatum.ParameterName = "DatumNovi";
paramDatum.Value = dataGridView1.CurrentRow.Cells[3].Value;
OleDbParameter paramOdlaska = new OleDbParameter();
paramOdlaska.OleDbType = OleDbType.Date;
paramOdlaska.Value = dataGridView1.CurrentRow.Cells[4].Value;
paramOdlaska.ParameterName = "ParametarOdlaska";
OleDbParameter paramDatum1 = new OleDbParameter();
paramDatum1.OleDbType = OleDbType.Date;
paramDatum1.ParameterName = "DatumNovi1";
paramDatum1.Value = dataGridView1.CurrentRow.Cells[3].Value;
OleDbParameter paramOdlaska1 = new OleDbParameter();
paramOdlaska1.OleDbType = OleDbType.Date;
paramOdlaska1.Value = dataGridView1.CurrentRow.Cells[4].Value;
paramOdlaska1.ParameterName = "ParametarOdlaska1";
OleDbParameter paramDatum2 = new OleDbParameter();
paramDatum2.OleDbType = OleDbType.Date;
paramDatum2.ParameterName = "DatumNovi2";
paramDatum2.Value = dataGridView1.CurrentRow.Cells[3].Value;
OleDbParameter paramOdlaska2 = new OleDbParameter();
paramOdlaska2.OleDbType = OleDbType.Date;
paramOdlaska2.Value = dataGridView1.CurrentRow.Cells[4].Value;
paramOdlaska2.ParameterName = "ParametarOdlaska2";
adapter.SelectCommand.Parameters.Add(paramDatum);
adapter.SelectCommand.Parameters.Add(paramOdlaska);
adapter.SelectCommand.Parameters.Add(paramDatum1);
adapter.SelectCommand.Parameters.Add(paramOdlaska1);
adapter.SelectCommand.Parameters.Add(paramDatum2);
adapter.SelectCommand.Parameters.Add(paramOdlaska2);
DataSet setPomocni = new DataSet();
adapter.Fill(setPomocni);
BindingManagerBase bmb = BindingContext[setPomocni.Tables[0]];
bmb.Position = 0;
DataView dv = new DataView(setPomocni.Tables[0]);
int brojZauzetih = dv.Table.Rows.Count;
string[] apartmani1 = new string[brojZauzetih];
string[] apartmani2 = new string[brojZauzetih];
string[] apartmani3 = new string[brojZauzetih];
for (int i = 0; i < brojZauzetih; i++)
{
DataRowView drv = (DataRowView)bmb.Current;
DataRow dr = (DataRow)drv.Row;
apartmani1 = dr["BrojApartmana"].ToString();
apartmani2 = dr["DatumDolaska"].ToString();
apartmani3 = dr["DatumOdlaska"].ToString();
bmb.Position++;
}
if (brojZauzetih > 0)
{
richTextBox3.Visible = true;
richTextBox3.AppendText("Zauzeti su bili apartmani sa brojem: ");
richTextBox2.AppendText("U željenom periodu već su zauzeti apartmani pod rednim brojem: ");
richTextBox2.AppendText("\n");
richTextBox2.AppendText("\n");
for (int z = 0; z < brojZauzetih; z++)
{
richTextBox2.AppendText(apartmani1[z]);
richTextBox2.AppendText(" ");
richTextBox2.AppendText(apartmani2[z]);
richTextBox2.AppendText(" ");
richTextBox2.AppendText(apartmani3[z]);
richTextBox2.AppendText("\n");
richTextBox2.AppendText("\n");
richTextBox3.AppendText(apartmani1[z]);
richTextBox3.AppendText(" ");
}
}
else
{
richTextBox2.AppendText("U željenom periodu nema zauzetih apartmana!!");
}
DialogResult drez = MessageBox.Show("Da li želite nastaviti sa rezervacijom?\n " + richTextBox2.Text + "", "Potvrdi!!",
MessageBoxButtons.YesNo, MessageBoxIcon.Information);
if (drez == DialogResult.Yes)
{
rezervacijaTableAdapter.Update(apartmanosDataSet1.Rezervacija);
apartmanosDataSet1.Rezervacija.AcceptChanges();
richTextBox3.Visible = false;
}
richTextBox2.ResetText();
Evo kod pa ako imate jos koju ideju sta bi se tu moglo napraviti.
Hvala unaprijed.I hvala za vec pruzenu pomoc.
richTextBox3.ResetText();
string RezervacijaSelect = "Select * from Rezervacija where ? between DatumDolaska and DatumOdlaska
or ? between DatumDolaska and DatumOdlaska
or DatumDolaska between ? and ?
or DatumOdlaska between ? and ?";
OleDbDataAdapter adapter = new OleDbDataAdapter(RezervacijaSelect, rezervacijaTableAdapter.Connection);
OleDbParameter paramDatum = new OleDbParameter();
paramDatum.OleDbType = OleDbType.Date;
paramDatum.ParameterName = "DatumNovi";
paramDatum.Value = dataGridView1.CurrentRow.Cells[3].Value;
OleDbParameter paramOdlaska = new OleDbParameter();
paramOdlaska.OleDbType = OleDbType.Date;
paramOdlaska.Value = dataGridView1.CurrentRow.Cells[4].Value;
paramOdlaska.ParameterName = "ParametarOdlaska";
OleDbParameter paramDatum1 = new OleDbParameter();
paramDatum1.OleDbType = OleDbType.Date;
paramDatum1.ParameterName = "DatumNovi1";
paramDatum1.Value = dataGridView1.CurrentRow.Cells[3].Value;
OleDbParameter paramOdlaska1 = new OleDbParameter();
paramOdlaska1.OleDbType = OleDbType.Date;
paramOdlaska1.Value = dataGridView1.CurrentRow.Cells[4].Value;
paramOdlaska1.ParameterName = "ParametarOdlaska1";
OleDbParameter paramDatum2 = new OleDbParameter();
paramDatum2.OleDbType = OleDbType.Date;
paramDatum2.ParameterName = "DatumNovi2";
paramDatum2.Value = dataGridView1.CurrentRow.Cells[3].Value;
OleDbParameter paramOdlaska2 = new OleDbParameter();
paramOdlaska2.OleDbType = OleDbType.Date;
paramOdlaska2.Value = dataGridView1.CurrentRow.Cells[4].Value;
paramOdlaska2.ParameterName = "ParametarOdlaska2";
adapter.SelectCommand.Parameters.Add(paramDatum);
adapter.SelectCommand.Parameters.Add(paramOdlaska);
adapter.SelectCommand.Parameters.Add(paramDatum1);
adapter.SelectCommand.Parameters.Add(paramOdlaska1);
adapter.SelectCommand.Parameters.Add(paramDatum2);
adapter.SelectCommand.Parameters.Add(paramOdlaska2);
DataSet setPomocni = new DataSet();
adapter.Fill(setPomocni);
BindingManagerBase bmb = BindingContext[setPomocni.Tables[0]];
bmb.Position = 0;
DataView dv = new DataView(setPomocni.Tables[0]);
int brojZauzetih = dv.Table.Rows.Count;
string[] apartmani1 = new string[brojZauzetih];
string[] apartmani2 = new string[brojZauzetih];
string[] apartmani3 = new string[brojZauzetih];
for (int i = 0; i < brojZauzetih; i++)
{
DataRowView drv = (DataRowView)bmb.Current;
DataRow dr = (DataRow)drv.Row;
apartmani1 = dr["BrojApartmana"].ToString();
apartmani2 = dr["DatumDolaska"].ToString();
apartmani3 = dr["DatumOdlaska"].ToString();
bmb.Position++;
}
if (brojZauzetih > 0)
{
richTextBox3.Visible = true;
richTextBox3.AppendText("Zauzeti su bili apartmani sa brojem: ");
richTextBox2.AppendText("U željenom periodu već su zauzeti apartmani pod rednim brojem: ");
richTextBox2.AppendText("\n");
richTextBox2.AppendText("\n");
for (int z = 0; z < brojZauzetih; z++)
{
richTextBox2.AppendText(apartmani1[z]);
richTextBox2.AppendText(" ");
richTextBox2.AppendText(apartmani2[z]);
richTextBox2.AppendText(" ");
richTextBox2.AppendText(apartmani3[z]);
richTextBox2.AppendText("\n");
richTextBox2.AppendText("\n");
richTextBox3.AppendText(apartmani1[z]);
richTextBox3.AppendText(" ");
}
}
else
{
richTextBox2.AppendText("U željenom periodu nema zauzetih apartmana!!");
}
DialogResult drez = MessageBox.Show("Da li želite nastaviti sa rezervacijom?\n " + richTextBox2.Text + "", "Potvrdi!!",
MessageBoxButtons.YesNo, MessageBoxIcon.Information);
if (drez == DialogResult.Yes)
{
rezervacijaTableAdapter.Update(apartmanosDataSet1.Rezervacija);
apartmanosDataSet1.Rezervacija.AcceptChanges();
richTextBox3.Visible = false;
}
richTextBox2.ResetText();
Ja obozavam procedure ali imam mali problemcic, otvoricu novi topik :)