|
[ Platinum VN @ 08.10.2003. 14:02 ] @
| Zdravo.
Pocetnik sam u vb programiranju. Radim vezbe iz knjige "Od pocetka... Visual Basic .NET". Zaglavio sam kod 16 Proramiranje SQL servera u ADO.NET. Ne mogu da zavrsim vezbu iz knjige. Hteo bi da napravim sopstvenu baze podataka. Greska se javlja kod Add dugmeta za dodavanje novog zapisa u tabelu. Greske koje se javljaju u tom delu su :
Line 1 : Incorrect syntax near ‘Parameter1’
Line 1 : Incorrect syntax near ‘?’
Line 1 : Incorrect syntax near ‘?’
Da li zna neko gde su greske?
Da dodam:
'Parametar za klonu title_ID...
...
Se pojavljuje 2 puta u kodu.
I ...Item(0)...
II...Item(4)...
Da li to tako mora?
Kao malo objasnjenje povucene su 2 tabele "titles" i "authors" koje su vezane za 3. "titleauthor" iz SQL pub datoteke.
Mozete da odgovorite i jednostavnije jer meni treba dodavanje zapisa u samo jednu tabelu (u mojoj bazi). Ali ako neko zna kako da resim ovaj primer nebi bilo lose da mi objasni radi kasnjeg prosirivanja.
Hvala u napred I evo koda:
Code:
Private Sub btnNew_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNew.Click
'Ponistite Ime1, Ime2 i Ime3 polja...
txtBooktitle.Text = ""
txtPrice.Text = ""
End Sub
Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click
Dim intPosition As Integer, intMaxID As Integer
Dim strID As String
Dim objCommand As SqlCommand = New SqlCommand()
'Sacuvajte trenutni polozaj zapisa...
intPosition = objCurrencyManager.Position
'Inicijalizujte novi primerak objekta DataSet...
objDataSet = New DataSet()
'Otvorite vezu sa bazom podataka...
objConnection.Open()
'Otvorite vezu sa bazom podataka...
objDataAdapter = New SqlDataAdapter( _
"SELECT MAX(title_id) AS MaxID " & _
"FROM titles WHERE title_id LIKE 'DM%'", objConnection)
'Popunite podacima onjekat DataSet...
objDataAdapter.Fill(objDataSet, "titles")
'Ako je kolona MaxID jednaka nuli...
If objDataSet.Tables("titles").Rows(0).Item("MaxID") Is _
System.DBNull.Value Then
'Podesite podrazumevanu vrednost na 1000...
intMaxID = 1000
Else
'U suprotnom , podesite promenljivu strID na vrednost MAXID...
strID = CStr(objDataSet.Tables("titles").Rows(0).Item("MaxID"))
'Uzmite vrednost celog broja iz niza...
intMaxID = CInt(strID.Remove(0, 2))
'Povecajte vrednost...
intMaxID += 1
End If
'Na kraju, podesite novi ID...
strID = "DM" & intMaxID
'Podesite osobine objekata SQLCommand...
objCommand.Connection = objConnection
objCommand.CommandText = "INSERT INTO titles" & _
"(title_id, title, type, price, pubdate) " & _
"VALUES(?,?, 'Demo',?, '" & "'); " & _
"INSERT INTO titleauthor (au_id, title_id) VALUES (?,?)"
objCommand.CommandType = CommandType.Text
'Dodajte parametre za cuvare mesta u iskazu SQL, u
'osobini CommnadText...
'Parametar za klonu title_ID...
objCommand.Parameters.Add(New SqlParameter())
objCommand.Parameters.Item(0).Direction = ParameterDirection.Input
objCommand.Parameters.Item(0).DbType = DbType.String
objCommand.Parameters.Item(0).Size = 6
objCommand.Parameters.Item(0).Value = strID
'Parametar za klonu sa naslovom...
objCommand.Parameters.Add(New SqlParameter())
objCommand.Parameters.Item(1).Direction = ParameterDirection.Input
objCommand.Parameters.Item(1).DbType = DbType.String
objCommand.Parameters.Item(1).Size = 80
objCommand.Parameters.Item(1).Value = txtBooktitle.Text
'Parametar za klonu sa cenom...
objCommand.Parameters.Add(New SqlParameter())
objCommand.Parameters.Item(2).Direction = ParameterDirection.Input
objCommand.Parameters.Item(2).DbType = DbType.Currency
objCommand.Parameters.Item(2).Size = 8
objCommand.Parameters.Item(2).Value = txtPrice.Text
'Parametar za klonu au_ID...
objCommand.Parameters.Add(New SqlParameter())
objCommand.Parameters.Item(3).Direction = ParameterDirection.Input
objCommand.Parameters.Item(3).DbType = DbType.String
objCommand.Parameters.Item(3).Size = 11
objCommand.Parameters.Item(3).Value = txtAuthorID.Text
'Parametar za klonu title_ID...
objCommand.Parameters.Add(New SqlParameter())
objCommand.Parameters.Item(4).Direction = ParameterDirection.Input
objCommand.Parameters.Item(4).DbType = DbType.String
objCommand.Parameters.Item(4).Size = 6
objCommand.Parameters.Item(4).Value = strID
'Izvrsite objekat SQLCommand da bi ste umetnuli nove podatke...
Try
objCommand.ExecuteNonQuery()
Catch err As SqlException
MessageBox.Show(err.Message)
End Try
'Zatvorite vezu...
objConnection.Close()
'Popunite skup podataka i povezite polja...
FillDataSetAndView()
BindFields()
'podesite polozaj zapisa na onaj koji je sacuvan...
objCurrencyManager.Position = intPosition
'Pokazite trenutni polozaj zapisa...
ShowPosition()
'Prikazite poruku u kojoj se vidi da je zapis dodat....
StatusBar1.Text = "Record Added"
'Ponistite...
objDataSet = Nothing
objDataAdapter = Nothing
objCommand = Nothing
End Sub
|
[ dotnet @ 08.10.2003. 16:52 ] @
Pozdrav
Greska se javlja zato sto za parametre u SqlCommand koristis '?' . SqlCommand za razliku od OleDbCommand koristi Named parametre. Tako da kad bi koristio OleDbCommand primer bi prosao bez problema. Da bi ovaj primer proradio zameni sledeci kod:
Code: 'Parametar za klonu title_ID...
objCommand.Parameters.Add(New SqlParameter())
objCommand.Parameters.Item(0).Direction = ParameterDirection.Input
objCommand.Parameters.Item(0).DbType = DbType.String
objCommand.Parameters.Item(0).Size = 6
objCommand.Parameters.Item(0).Value = strID
'Parametar za klonu sa naslovom...
objCommand.Parameters.Add(New SqlParameter())
objCommand.Parameters.Item(1).Direction = ParameterDirection.Input
objCommand.Parameters.Item(1).DbType = DbType.String
objCommand.Parameters.Item(1).Size = 80
objCommand.Parameters.Item(1).Value = txtBooktitle.Text
'Parametar za klonu sa cenom...
objCommand.Parameters.Add(New SqlParameter())
objCommand.Parameters.Item(2).Direction = ParameterDirection.Input
objCommand.Parameters.Item(2).DbType = DbType.Currency
objCommand.Parameters.Item(2).Size = 8
objCommand.Parameters.Item(2).Value = txtPrice.Text
'Parametar za klonu au_ID...
objCommand.Parameters.Add(New SqlParameter())
objCommand.Parameters.Item(3).Direction = ParameterDirection.Input
objCommand.Parameters.Item(3).DbType = DbType.String
objCommand.Parameters.Item(3).Size = 11
objCommand.Parameters.Item(3).Value = txtAuthorID.Text
'Parametar za klonu title_ID...
objCommand.Parameters.Add(New SqlParameter())
objCommand.Parameters.Item(4).Direction = ParameterDirection.Input
objCommand.Parameters.Item(4).DbType = DbType.String
objCommand.Parameters.Item(4).Size = 6
objCommand.Parameters.Item(4).Value = strID
sa
Code: 'Parametar za klonu title_ID...
objCommand.Parameters.Add("@title_id", SqlDbType.VarChar, 6).Value = strID
'Parametar za klonu sa naslovom...
objCommand.Parameters.Add("@title", SqlDbType.VarChar, 80).Value = txtBooktitle.Text
'Parametar za klonu sa cenom...
objCommand.Parameters.Add("@price", SqlDbType.Money).Value = txtPrice.Text
'Parametar za klonu au_ID...
objCommand.Parameters.Add("@au_id", SqlDbType.VarChar, 11).Value = txtAuthorID.Text
S obzirom da @title_id imas dva puta sa istom vrednoscu, dovoljno je da samo jednom definises parametar.
[ Platinum VN @ 08.10.2003. 17:28 ] @
Hvala dotnet na brzom odgovoru.
Zamenio sam 'Parametar' kodove i obrisao ponavljanje za @title_id (verovatno je stamparska greska). Ali ostaju mi greseke:
Line 1 : Incorrect syntax near ‘?’
Line 1 : Incorrect syntax near ‘?’
To je u deo
Code:
'Podesite osobine objekata SQLCommand...
objCommand.Connection = objConnection
objCommand.CommandText = "INSERT INTO titles" & _
"(title_id, title, type, price, pubdate) " & _
"VALUES(?,?, 'Demo',?, ' " & "'); " & _
"INSERT INTO titleauthor (au_id, title_id) VALUES (?,?)"
objCommand.CommandType = CommandType.Text
u knjizi pise:
Code:
"VALUES(?,?, `Demo`,?, `" & DataTime.Now() & "`) ; " & _
Ja sam izbrisao
& DataTime.Now()
jer javlja gresku da ne prepoznaje DataTime. I buni me jos da li u toj liniji treba da stoji znak (`) ili ('). Lose je interpretirana knjiga. Pa je mozda greska kod brisanja. Obrisao sam vise ili manje nego sto treba.
Hvala.
[ dotnet @ 08.10.2003. 17:47 ] @
Citat: Platinum VN:
Zamenio sam 'Parametar' kodove i obrisao ponavljanje za @title_id (verovatno je stamparska greska). Ali ostaju mi greseke:
Line 1 : Incorrect syntax near ‘?’
Line 1 : Incorrect syntax near ‘?’
Ups izvini u brzini sam zaboravio da ubacim i sledece:
Zameni kod:
Code:
objCommand.CommandText = "INSERT INTO titles" & _
"(title_id, title, type, price, pubdate) " & _
"VALUES(?,?, 'Demo',?, '" & "'); " & _
"INSERT INTO titleauthor (au_id, title_id) VALUES (?,?)"
sa
Code:
objCommand.CommandText = "INSERT INTO titles" & _
"(title_id, title, type, price, pubdate) " & _
"VALUES(@title_id,@title, 'Demo',@price, '" & "'); " & _
"INSERT INTO titleauthor (au_id, title_id) VALUES (@au_id, @title_id)"
Znaci menjas '?' sa nazivima parametara.
Citat: Platinum VN:
u knjizi pise:
Code:
"VALUES(?,?, `Demo`,?, `" & DataTime.Now() & "`) ; " & _
Ja sam izbrisao
& DataTime.Now()
jer javlja gresku da ne prepoznaje DataTime. I buni me jos da li u toj liniji treba da stoji znak (`) ili ('). Lose je interpretirana knjiga. Pa je mozda greska kod brisanja. Obrisao sam vise ili manje nego sto treba.
Hvala.
Umesto
Code:
`" & DataTime.Now() & "`
mozes da ubacis
Code:
GETDATE()
A znak je definitivno (')
[ Platinum VN @ 08.10.2003. 18:54 ] @
Hvala puno dotnet. :)
Spasao si mi stvar. Da dodam vezba je radjena u oldb konekciji, ali greska je u samom kodu:
Code:
Dim objConnection As OleDbConnection = New _
OleDbConnection("Provider=SQLOLEDB;” & _
“Data Source=localhost;Initial Catalog=pubs;" & _
"User ID=sa;Password=vbdonet;")
Skinuo sam sa neta uradjene vezbe. Nema ova, nego predhodna sa upotrebom DataGrid -om. Uradjen je u SQL konekciji, mada ni ona ne radi. Kopajuci po Help-u dodao sam “Integrated Security=SSPI;” i “obrisao User ID i Password” (jer koristim Use Windows NT Integrated Security) proradilo je u SQL-u (vezba sa net-a). U oldb ne pomaze. Pa sam celu vezbu nastavio u SQL prepravljajuci oldb.
Na ovo nemoras da odgovoris.
Hvala jos jenom. :)
[ Platinum VN @ 09.10.2003. 15:11 ] @
Nisam hteo nista da pisem, zbog mogucih gresaka. Ostalo mi je jos da napisem koda za 2 dugmeta. Sad sam zavrsio vezbu. Hteo bi jos jednom da se zahvalim dotnet –u za pomoc. Vezba koristi OleDb konekciju, a ja sam je uradio u sql konekciji. Heh, niko nije savrsen.
Imam jos jedno pitanje. Nije komplikovano.
Prilikom Perform Search pretrazivanje je moguce samo ako se ukuca tacan naziv. Kako bih mogao da odkucam An i kliknem na dugme, a da mi izlista npr.: Ana, Andjela, Anita... , a da se ne pojavi npr.: Brankica, Bojana ...
Evo kompletnog koda za dugme Perform Search
Code:
Private Sub btnPerformSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPerformSearch.Click
'Deklarisite lokalne promenljive...
Dim intposition As Integer
'Odredite odgovarajucu izabranu stavku i podesite
'svojstvo Sort objekat DataView...
Select Case cmbField.SelectedIndex
Case 0 'Last Name
objDataView.Sort = "au_lname"
Case 1 'First Name
objDataView.Sort = "au_fname"
Case 2 'Book Title
objDataView.Sort = "title"
Case 3 'Price
objDataView.Sort = "price"
End Select
'Ako polje za pretrazivanje nije cena, onda...
If cmbField.SelectedIndex < 3 Then
'pronadjite ime ili naslov...
intposition = objDataView.Find(txtSearchCriteria.Text)
Else
'U suprotnom, pronadjite cenu...
intposition = objDataView.Find(cdec(txtSearchCriteria.Text))
End If
If intposition = -1 Then
'Prikazite poruku u kojoj se vidi da zapis nije pronadjen...
StatusBar1.Text = "Record Not Found"
Else
'U suprotnom, prikazite poruku da je zapis
'pronadjen i promenite polozaj Currencymanager na taj
'zapis...
StatusBar1.Text = "Record Found"
objCurrencyManager.Position = intposition
End If
'Prikazite trenutni polozaj zapisa...
ShowPosition()
End Sub
Hvala
[ dotnet @ 10.10.2003. 00:09 ] @
Pozdrav
Citat: Platinum VN:
Prilikom Perform Search pretrazivanje je moguce samo ako se ukuca tacan naziv. Kako bih mogao da odkucam An i kliknem na dugme, a da mi izlista npr.: Ana, Andjela, Anita... , a da se ne pojavi npr.: Brankica, Bojana ...
Sa Find ovo nije moguce. Probaj nesto tipa
Code: objDataView.RowFilter = "au_fname LIKE 'An%'"
'%' zamenjuje sve karaktere iza An pod uslovom da se koristi sa LIKE.
E sad nisam siguran kako da uklopis ovo u tvoj primer.
Citat: Platinum VN:
Hteo bi jos jednom da se zahvalim dotnet –u za pomoc.
Nema na cemu.
[ Platinum VN @ 10.10.2003. 18:14 ] @
Hvala probacu nesto. 
Ako uradim nesto pa zapnem pitacu.
[ Platinum VN @ 16.10.2003. 13:46 ] @
Code:
ComboBox1.DataSource = DataSet1
ComboBox1.DisplayMember = "Customers.FirstName"
Me.BindingContest(DataSet1, "Customers").Position = 1
Pronaso sam resenje. Fali mi jos ovo. Moze li se
"Customers.FirstName"
zameniti i povezati ili vec nekako sa comboBox2. koji sadrzi nazive imena redova ("Ime", "Prezime"). Tako da comboBox1 DisplayMember prikazuje izbrani red iz comboBox2.
nesto kao:
ComboBox1.DisplayMember = "Customer." & ComboBox2.Text
Hvala
[ Platinum VN @ 18.10.2003. 18:38 ] @
Da napisem napravio sam, zbog nepoznavanja progarma, uradio sam na drugi nacin.
Mozda bi moglo da se resi kao:
cboName.DataSource = objDataSet.Tables("authors")
cboName.DisplayMember = "ComboBox.Text"
ali sad me mrzi da menjam, posto sam zavrsio.
Hvala
[ Qler01 @ 25.09.2012. 10:19 ] @
Pozdrav svima nadam se da cu dobiti brz odgovor,
zapeo sam kod store procedura i njihovog kreiranja za odredjenu tabelu.
Uradim EXECUTE za liniju code "CREATE PROCEDURE [DBO].[INSERTStatisticsMissingCounts]" uradio sam execute da bi mi sacuvao store proceduru u programmability ali dobijem gresku
>>Msg 102, Level 15, State 1, Procedure insertStatisticsMissingCounts, Line 1
Incorrect syntax near 'insertStatisticsMissingCounts'.<<
Pokrenuo sam pravljenje store procedure New Store procedure u pragrammability
uspeo sam hvala ...
[Ovu poruku je menjao Qler01 dana 25.09.2012. u 11:48 GMT+1]
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|