# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > VB.NET > مبتدی: رفع مشکلات برنامه من

## nefrat

سلام...
دارم یه برنامه مینویسم که خیلی جزیی هست مال بیمارستانه...میخوام اگه میشه کمکم کنید...
از فرم بیمار شروع کنم : که کل برنامهایی که نوشتم اینه 


Imports System.Data '' baraye ADO.Net
Imports System.Data.SqlClient '' SQLSERVER
Public Class Bimaran
    Dim constr As String = " Data Source=.\SQLEXPRESS;AttachDbFilename=N:\Hospital\s  hafagh.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"
    Dim con As New SqlConnection(constr)
    Dim da As SqlDataAdapter
    Dim ds As New DataSet

    Private Sub Bimaran_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'TODO: This line of code loads data into the 'ShafaghDataSet.Bimar' table. You can move, or remove it, as needed.
        Me.BimarTableAdapter.Fill(Me.ShafaghDataSet.Bimar)
        Try
            con.Open()
            Dim cmdstr As String = "select * from Bimar"
            da = New SqlDataAdapter(cmdstr, con)
            da.Fill(ds, "Paz_bakhsh")
            Tfname.DataBindings.Add(New Binding("text", ds, "Bimar.Fname"))
            Tlname.DataBindings.Add(New Binding("text", ds, "Bimar.LName"))
            Tsex.DataBindings.Add(New Binding("text", ds, "Bimar.Sex"))
            Tshsh.DataBindings.Add(New Binding("text", ds, "Bimar.SHSH"))
            Tmeli.DataBindings.Add(New Binding("text", ds, "Bimar.Meli_code"))
            Tadd1.DataBindings.Add(New Binding("text", ds, "Bimar.Add1"))
            Tadd2.DataBindings.Add(New Binding("text", ds, "Bimar.Add2"))
            Tmo.DataBindings.Add(New Binding("text", ds, "Bimar.B_Date_Mo"))
            Tye.DataBindings.Add(New Binding("text", ds, "Bimar.B_Date_Ye"))
            Tda.DataBindings.Add(New Binding("text", ds, "Bimar.B_Date_Da"))
            Tbime.DataBindings.Add(New Binding("text", ds, "Bimar.Bime"))
            Tcodbime.DataBindings.Add(New Binding("text", ds, "Bimar.Bbimecod"))
            TFathername.DataBindings.Add(New Binding("text", ds, "Bimar.Father_name"))
            Tphon.DataBindings.Add(New Binding("text", ds, "Bimar.Phone"))
            Tmob.DataBindings.Add(New Binding("text", ds, "Bimar.Mobile"))
            Tbakhshn.DataBindings.Add(New Binding("text", ds, "Bimar.bakhsh"))
            Tdocnam.DataBindings.Add(New Binding("text", ds, "Bimar.Dr_name"))
            Tsharh.DataBindings.Add(New Binding("text", ds, "Bimar.sharh"))
            Tpazye.DataBindings.Add(New Binding("text", ds, "Bimar.paz_date_ye"))
            Tpazmo.DataBindings.Add(New Binding("text", ds, "Bimar.paz_date_mo"))
            Tpazda.DataBindings.Add(New Binding("text", ds, "Bimar.paz_date_da"))
            TshshS.DataBindings.Add(New Binding("text", ds, "Bimar.shsh"))
            Tsabeghe.DataBindings.Add(New Binding("text", ds, "Bimar.sabeghe"))
            lblID.DataBindings.Add(New Binding("text", ds, "Bimar.ID"))
            lblDB.Text = "بانک متصل است"
        Catch ex As Exception
            lblcon.Text = ex.Message
        Finally
            con.Close()
        End Try
    End Sub


    Private Sub Button17_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd.Click
        Dim cmd As New SqlCommand("insert into Bimar(ID,FName,LName,Father_name,SHSH,Meli_code,B_  Date_Mo,B_Date_Ye,B_Date_Da,Sex,Add1,Add2,Phone,Mo  bile,Bime,Bbimecod,Sabeghe,r_name,sharh,paz_date_y  e,paz_date_mo,paz_date_da,bakhsh)Values(@ID,@FName  ,@LName,@Father_name,@SHSH,@Meli_code,@B_Date_Mo,@  B_Date_Ye,@B_Date_Da,@Sex,@Add1,@Add2,@Phone,@Mobi  le,@Bime,@Bbimecod,@Sabeghe,@Dr_name,@sharh,@paz_d  ate_ye,@paz_date_mo,@paz_date_da,@bakhsh)", con)
        Try
            con.Open()
            cmd.Parameters.Add("@ID", SqlDbType.Int).Value = lblID.Text
            cmd.Parameters.Add("@FName", SqlDbType.NVarChar).Value = Tfname.Text
            cmd.Parameters.Add("@LName", SqlDbType.NVarChar).Value = Tlname.Text
            cmd.Parameters.Add("@Father_name", SqlDbType.NVarChar).Value = TFathername.Text
            cmd.Parameters.Add("@SHSH", SqlDbType.NVarChar).Value = Tshsh.Text
            cmd.Parameters.Add("@SHSH", SqlDbType.NVarChar).Value = TshshS.Text
            cmd.Parameters.Add("@Meli_code", SqlDbType.NVarChar).Value = Tmeli.Text
            cmd.Parameters.Add("@B_Date_Mo", SqlDbType.Int).Value = Tmo.Text
            cmd.Parameters.Add("@B_Date_Ye", SqlDbType.Int).Value = Tye.Text
            cmd.Parameters.Add("@B_Date_Da", SqlDbType.Int).Value = Tda.Text
            cmd.Parameters.Add("@Sex", SqlDbType.NChar).Value = Tsex.Text
            cmd.Parameters.Add("@Add1", SqlDbType.NVarChar).Value = Tadd1.Text
            cmd.Parameters.Add("@Add2", SqlDbType.NVarChar).Value = Tadd2.Text
            cmd.Parameters.Add("@Phone", SqlDbType.Int).Value = Tphon.Text
            cmd.Parameters.Add("@Mobile", SqlDbType.Int).Value = Tmob.Text
            cmd.Parameters.Add("@Bime", SqlDbType.NVarChar).Value = Tbime.Text
            cmd.Parameters.Add("@Bbimecod", SqlDbType.Int).Value = Tcodbime.Text
            cmd.Parameters.Add("@Sabeghe", SqlDbType.NVarChar).Value = Tsabeghe.Text
            cmd.Parameters.Add("@Dr_name", SqlDbType.NVarChar).Value = Tdocnam.Text
            cmd.Parameters.Add("@sharh", SqlDbType.NVarChar).Value = Tsharh.Text
            cmd.Parameters.Add("@paz_date_ye", SqlDbType.Int).Value = Tpazye.Text
            cmd.Parameters.Add("@paz_date_mo", SqlDbType.Int).Value = Tpazmo.Text
            cmd.Parameters.Add("@paz_date_da", SqlDbType.Int).Value = Tpazda.Text
            cmd.Parameters.Add("@bakhsh", SqlDbType.NVarChar).Value = Tbakhshn.Text
            cmd.ExecuteNonQuery()
            ds.Clear()
            da.Fill(ds, "Bimar")
            da.Update(ds, "Bimar")
            lblDB.Text = "بانک متصل است"
        Catch ex As Exception
            lblcon.Text = ex.Message
        Finally
            con.Close()

        End Try

    End Sub
End ClassEnd Class




اما وقتی show میکنم به جای اتصال برقراره ( بانک وصله) میگه :

*child list for field Bimar cannot be created*

میشه بگید چی کار کنم ؟

و وقتی که دکمه ثبت و میزنم میگه :

*failed to convert parameter value from a string to a int 32*

----------


## amirsadeghi

cmd.Parameters.Add("@B_Date_Mo", SqlDbType.Int).Value = Tmo.Text
            cmd.Parameters.Add("@B_Date_Ye", SqlDbType.Int).Value = Tye.Text
            cmd.Parameters.Add("@B_Date_Da", SqlDbType.Int).Value = Tda.Text

خطای دومی تو این خطها و یا شایدم جاهای دیگه اتفاق میافته
شما داری مقدار تکست رو میریزی توی فیلد عددی

----------


## amirsadeghi

خطای اولی هم فکر کنم مال این باشه که تو form_load نوشتی برنامه رو!
معمولا تو این رویداد کدهای دسترسی به کنترل ها رو نباید قرار بدید!

----------


## nefrat

نه آخه میدونی توی فرم لود نوشتم که اگه اتصال برقرار شد رکورد اول منو نشون بده توی تکست هام تا مطمئن شم ...
و اینکه اگه توی فرم ننویسم بیارم توی همون دکمه ثبت بنویسم!؟
و اینکه اون 3 خطی که گفتید کجاش ایراد داره ؟ نوع اونها هم توی جدول و هم اینجا یکسانه!

----------


## amirsadeghi

میتونی از form_activate استفاده کنی
یا در انتهای form_load یه تابع که مختص اینکاره رو صدا بزنی
در مورد دومی اینکه مقداری که تو خاصیت text یه تکست باکس هست به صورت رشته ایه حتی اگه عدد باشه
یعنی مثلا 123 نیست بلکه "123" هست!
پس باید تبدیل بشه به عدد

----------


## nefrat

منظورت اینکه بگم val(text.text) ????

یا اینکه کدی که توی فرم لود نوشتم text ها رو تغییر بدم !؟ 


Tmo.DataBindings.Add(New Binding("int", ds, "Bimar.B_Date_Mo"))

----------


## amirsadeghi

توی button7_click اونجایی که داری به فیلدهات مقدار میدی دقت کن که مقداری که داری میدی نوعش با نوع فیلد یکی باشه
یعنی 
cmd.Parameters.Add("@B_Date_Mo", SqlDbType.Int).Value =val( Tmo.Text)

یا convert.toint32

----------


## nefrat

من الان تغییرش دادم به این حالت درسته؟ منظورتون همین بود؟



Imports System.Data '' baraye ADO.Net
Imports System.Data.SqlClient '' SQLSERVER
Public Class Bimaran
    Dim constr As String = " Data Source=.\SQLEXPRESS;AttachDbFilename=N:\Hospital\s  hafagh.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"
    Dim con As New SqlConnection(constr)
    Dim da As SqlDataAdapter
    Dim ds As New DataSet

    Private Sub Bimaran_activate(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'TODO: This line of code loads data into the 'ShafaghDataSet.Bimar' table. You can move, or remove it, as needed.
        Me.BimarTableAdapter.Fill(Me.ShafaghDataSet.Bimar)
        Try
            con.Open()
            Dim cmdstr As String = "select * from Bimar"
            da = New SqlDataAdapter(cmdstr, con)
            da.Fill(ds, "Paz_bakhsh")
            Tfname.DataBindings.Add(New Binding("text", ds, "Bimar.Fname"))
            Tlname.DataBindings.Add(New Binding("text", ds, "Bimar.LName"))
            Tsex.DataBindings.Add(New Binding("text", ds, "Bimar.Sex"))
            Tshsh.DataBindings.Add(New Binding("text", ds, "Bimar.SHSH"))
            Tmeli.DataBindings.Add(New Binding("text", ds, "Bimar.Meli_code"))
            Tadd1.DataBindings.Add(New Binding("text", ds, "Bimar.Add1"))
            Tadd2.DataBindings.Add(New Binding("text", ds, "Bimar.Add2"))
            Tmo.DataBindings.Add(New Binding("text", ds, "Bimar.B_Date_Mo"))
            Tye.DataBindings.Add(New Binding("text", ds, "Bimar.B_Date_Ye"))
            Tda.DataBindings.Add(New Binding("text", ds, "Bimar.B_Date_Da"))
            Tbime.DataBindings.Add(New Binding("text", ds, "Bimar.Bime"))
            Tcodbime.DataBindings.Add(New Binding("text", ds, "Bimar.Bbimecod"))
            TFathername.DataBindings.Add(New Binding("text", ds, "Bimar.Father_name"))
            Tphon.DataBindings.Add(New Binding("text", ds, "Bimar.Phone"))
            Tmob.DataBindings.Add(New Binding("text", ds, "Bimar.Mobile"))
            Tbakhshn.DataBindings.Add(New Binding("text", ds, "Bimar.bakhsh"))
            Tdocnam.DataBindings.Add(New Binding("text", ds, "Bimar.Dr_name"))
            Tsharh.DataBindings.Add(New Binding("text", ds, "Bimar.sharh"))
            Tpazye.DataBindings.Add(New Binding("text", ds, "Bimar.paz_date_ye"))
            Tpazmo.DataBindings.Add(New Binding("text", ds, "Bimar.paz_date_mo"))
            Tpazda.DataBindings.Add(New Binding("text", ds, "Bimar.paz_date_da"))
            TshshS.DataBindings.Add(New Binding("text", ds, "Bimar.shsh"))
            Tsabeghe.DataBindings.Add(New Binding("text", ds, "Bimar.sabeghe"))
            lblID.DataBindings.Add(New Binding("text", ds, "Bimar.ID"))
            lblDB.Text = "بانک متصل است"
        Catch ex As Exception
            lblcon.Text = ex.Message
        Finally
            con.Close()
        End Try
    End Sub


    Private Sub Button17_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd.Click
        Dim cmd As New SqlCommand("insert into Bimar(ID,FName,LName,Father_name,SHSH,Meli_code,B_  Date_Mo,B_Date_Ye,B_Date_Da,Sex,Add1,Add2,Phone,Mo  bile,Bime,Bbimecod,Sabeghe,r_name,sharh,paz_date_y  e,paz_date_mo,paz_date_da,bakhsh)Values(@ID,@FName  ,@LName,@Father_name,@SHSH,@Meli_code,@B_Date_Mo,@  B_Date_Ye,@B_Date_Da,@Sex,@Add1,@Add2,@Phone,@Mobi  le,@Bime,@Bbimecod,@Sabeghe,@Dr_name,@sharh,@paz_d  ate_ye,@paz_date_mo,@paz_date_da,@bakhsh)", con)
        Try
            con.Open()
            cmd.Parameters.Add("@ID", SqlDbType.Int).Value = Val(lblID.Text)
            cmd.Parameters.Add("@FName", SqlDbType.NVarChar).Value = Tfname.Text
            cmd.Parameters.Add("@LName", SqlDbType.NVarChar).Value = Tlname.Text
            cmd.Parameters.Add("@Father_name", SqlDbType.NVarChar).Value = TFathername.Text
            cmd.Parameters.Add("@SHSH", SqlDbType.NVarChar).Value = Tshsh.Text
            cmd.Parameters.Add("@SHSH", SqlDbType.NVarChar).Value = TshshS.Text
            cmd.Parameters.Add("@Meli_code", SqlDbType.NVarChar).Value = Tmeli.Text
            cmd.Parameters.Add("@B_Date_Mo", SqlDbType.Int).Value = Val(Tmo.Text)
            cmd.Parameters.Add("@B_Date_Ye", SqlDbType.Int).Value = Val(Tye.Text)
            cmd.Parameters.Add("@B_Date_Da", SqlDbType.Int).Value = Val(Tda.Text)
            cmd.Parameters.Add("@Sex", SqlDbType.NChar).Value = Tsex.Text
            cmd.Parameters.Add("@Add1", SqlDbType.NVarChar).Value = Tadd1.Text
            cmd.Parameters.Add("@Add2", SqlDbType.NVarChar).Value = Tadd2.Text
            cmd.Parameters.Add("@Phone", SqlDbType.Int).Value = Val(Tphon.Text)
            cmd.Parameters.Add("@Mobile", SqlDbType.Int).Value = Val(Tmob.Text)
            cmd.Parameters.Add("@Bime", SqlDbType.NVarChar).Value = Tbime.Text
            cmd.Parameters.Add("@Bbimecod", SqlDbType.Int).Value = Val(Tcodbime.Text)
            cmd.Parameters.Add("@Sabeghe", SqlDbType.NVarChar).Value = Tsabeghe.Text
            cmd.Parameters.Add("@Dr_name", SqlDbType.NVarChar).Value = Tdocnam.Text
            cmd.Parameters.Add("@sharh", SqlDbType.NVarChar).Value = Tsharh.Text
            cmd.Parameters.Add("@paz_date_ye", SqlDbType.Int).Value = Val(Tpazye.Text)
            cmd.Parameters.Add("@paz_date_mo", SqlDbType.Int).Value = Val(Tpazmo.Text)
            cmd.Parameters.Add("@paz_date_da", SqlDbType.Int).Value = Val(Tpazda.Text)
            cmd.Parameters.Add("@bakhsh", SqlDbType.NVarChar).Value = Tbakhshn.Text
            cmd.ExecuteNonQuery()
            ds.Clear()
            da.Fill(ds, "Bimar")
            da.Update(ds, "Bimar")
            lblDB.Text = "بانک متصل است"
        Catch ex As Exception
            lblcon.Text = ex.Message
        Finally
            con.Close()

        End Try

    End Sub

    Private Sub TextBox64_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox64.TextChanged

    End Sub
End Class

----------


## amirsadeghi

اون قسمتش درست شد. تست کردی ببینی بازم خطا داره یا نه؟

----------


## nefrat

بله تست کردم اما موقعی که اجرا میکنم میگه *child list for field Bimar cannot be created

*

----------


## nefrat

وقتی داده میدم میگه :

*The variable name '@SHSH' has already been declared. Variable names must be unique within a query batch or stored procedure.

Must declare the scalar variable "@Meli_code".*

----------


## nefrat

یکی نیست به من کمک کنه!؟

----------


## amirsadeghi

خب شما shsh رو 2 بار مقدار دهی کردی فکر کنم
یه بار با حروف بزرگ نوشتی یه بار با حروف کوچیک!

----------


## nefrat

مرسی ممنون درست شد.... 
حالا ببینید میشه کمک کنید برای حذف؟


این کدی هست که نوشتم اما خوب مسلما کار نمیکنه ... :D
 راهنمایی میکنید؟ میخوام وقتی توی تکست شماره شناسنامه زد اول اطلاعات بیاد توی تکست باکس ها مثل سرچ بعد با زدن دکمه delet حذف شه !!!

[VB]


    Private Sub MyDataGrid_Delete(ByVal sender As Object, ByVal E As DataGridCommandEventArgs)
        Dim deleteCmd As String = "DELETE FROM bimar WHERE Tshshs.text = @shsh;"
        Dim myCommand As SqlCommand = New SqlCommand(deleteCmd, con)
        myCommand.Parameters.Add(New SqlParameter("@SHSH", SqlDbType.NVarChar, 11))
        myCommand.Parameters("@SHSH").Value = DG2.DataKeys(CInt(E.Item.ItemIndex)
        myCommand.Connection.Open()
        Try
            myCommand.ExecuteNonQuery()
            LBLdel.Text = "Record Deleted"
        Catch ex As SqlException
            LBLdel.Text = "ERROR: Could not delete record"
            LBLdel.ForeColor = Color.Red
        End Try

        myCommand.Connection.Close()

        BindGrid()
    End Sub

    Public Sub BindGrid()
        Dim myCommand As SqlDataAdapter = New SqlDataAdapter("SELECT *" & " FROM bimaran", con)
        Dim ds As DataSet = New DataSet()
        myCommand.Fill(ds)
        DG2.DataSource = ds
    End Sub


[VB]

----------


## nefrat

نمیدونم توی دکمه حذف چی بنویسم!

----------


## amirsadeghi

الان مشکلت توی دکمه delete  یا توی نشون دادن فیلد توی تکست ها؟

----------


## nefrat

خوب ببین توی فیلد ها نشون نمیده ... یعنی یه جورایی باید بگم وقتی من شماره شناسنامه دادم فیلد ها شو نشون بده و اگه حذف و زدم اون سطر و از جدول حذف کنه...
و تمام چیزی که بلد بودم این بوده...

----------


## nefrat

خط 4 برنامه از DG2.DataKeys ایراد میگیره میگه is not member of windows.system.forms.datagrid view
 و توی خط اول از  DataGridCommandEventArgs میگه این نیست منم کردمشDataGridViewRowEventArgs

----------


## nefrat

اگه بخوام شماره شناسنامه دادم فیلد و نشون بده توی تکست ها چجوری باید بگم؟

----------

