|
In a vb.net 2010 application, I want to make a minor change to an existing application. I want to pass the value of 'SchoolNum' into the sql listed below but I am getting an error message. I do not know what the error message is since the object is not accessible
The following is the code of where the call is coming from:
Letter is an object that is passed between different parts of the application.
Dim SchoolNum As String = '332'
_dtDetail = SelectDetail(Letter, SchoolNum)
The following is the function that is executed.
"Public Function SelectDetail(ByVal Letter As Letter, ByVal SchoolNum As String) As DataTable"
Public Function SelectDetail(ByVal Letter As Letter, ByVal SchoolNum As String) As DataTable
Dim _dt As DataTable = New DataTable()
Dim SchoolNumber As String = SchoolNum
Const sql As String = "SELECT d.LINK,d.absdt " _
& ",CAST(ROUND(SUM([ABSCNT]), 2) AS NUMERIC(24,2)) AS absentCount " _ & "FROM ADetails d INNER JOIN AASTU s ON d.link = s.link " _
& "INNER JOIN AASCH sch ON d.schoolnum = sch.schoolnum " _
& "WHERE d.STULINK = @link " _
& "AND d.schoolnum = + SchoolNum " _
& "GROUP BY d.LINK,d.absdt " _
& "ORDER BY d.ABSDT ; "
Using con As SqlConnection = DB.OpenConnectionS()
Using da As SqlDataAdapter = New SqlDataAdapter(sql, con)
Try
da.SelectCommand.Parameters.Add("@link", SqlDbType.Int).Value = Letter.Link
da.Fill(_dt)
Catch ex As Exception
End Try
End Using
End Using
Return _dt
End Function
#End Region
Thus can you show me the code where I can pass in a string value called SchoolNum into the function called 'SelectDetail' so the sql will execute successfully?
|
|
|
|
|
What is the error message, and what line of code does it refer to? What is it about the function call that you do not understand? The parameters are quite clearly specified above.
|
|
|
|
|
Don't use string concatenation to pass the parameter - you'll leave your code vulnerable to SQL Injection[^].
Instead, pass the parameter in the Parameters collection, in the same way as the Letter.Link parameter:
Const sql As String = "SELECT d.LINK,d.absdt " _
& ",CAST(ROUND(SUM([ABSCNT]), 2) AS NUMERIC(24,2)) AS absentCount " _
& "FROM ADetails d INNER JOIN AASTU s ON d.link = s.link " _
& "INNER JOIN AASCH sch ON d.schoolnum = sch.schoolnum " _
& "WHERE d.STULINK = @link " _
& "AND d.schoolnum = @SchoolNum " _
& "GROUP BY d.LINK,d.absdt " _
& "ORDER BY d.ABSDT ; "
Using con As SqlConnection = DB.OpenConnectionS()
Using da As SqlDataAdapter = New SqlDataAdapter(sql, con)
da.SelectCommand.Parameters.Add("@link", SqlDbType.Int).Value = Letter.Link
da.SelectCommand.Parameters.AddWithValue("@SchoolNum", SchoolNum)
da.Fill(_dt)
End Using
End Using
You should also remove the Try..Catch block, which is swallowing the exception, making it virtually impossible to debug the error.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Thanks that solved the issue!
|
|
|
|
|
I'm maintaining code that has a VB6 TextBox as an ActiveX control running in an ASP .Net 2.x web app. For a host of reasons the web page has to run in Compatibility Mode or the ActiveX controls won't run in IE 10 + 11. But for this particular control I see the text in the multiline TextBox truncated to only the first character (and even that is slightly chopped off) at certain zoom factors (including 100%) in IE 10 and 11 in Compatibility mode. Runs fine in IE 9 and earlier. If I zoom the page it redraws fine at all zoom factors. But if I refresh the page, it fails again.
This gets more bizarre. The truncation is not just the text but the background fill as well. Only the upper left approx 10x10 px redraws.
I have tried to force the element to redraw itself using (see http://stackoverflow.com/questions/8840580/force-dom-redraw-refresh-on-chrome-mac):
var item = document.getElementById('myItem');
var sVal = item.style.display;
item.style.display = 'none';
item.style.display = sVal;
This works but ONLY if I use this code within my onKeyDown routine. It DOESN'T work if I call it in the window::onload routine. WTH?
I also tried setting item.runtimeStyle.visibility to 'hidden' and back to 'visible', but that didn't work at all.
Any suggestions on where I should look or what I should try?
Bill Cumming
modified 10-Apr-15 17:23pm.
|
|
|
|
|
Why are you using an ActiveX control from VB6? What features does it give you that the built-in <asp:TextBox> / <input type="text" /> / <textarea> elements don't have?
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
The quick answer is cuz it's old code and the developers are long gone. Dunno if they knew about it.
Alas I have had this legacy project dropped in my lap. I don't know VB, ASP .Net or JavaScript, (I'm a C# kinda guy) so I'm clueless to know where to look in the plumbing between them all to know what to check.
I don't fully understand what extra behavior the ActiveX gave them - the events I see it handling are nothing special. Your suggestion sounds reasonable to me so I'll look into it. I would still like to know why it's failing though....
Thanks for the suggestion
Bill Cumming
|
|
|
|
|
Hello !
In this list of windows Messages : http://www.pinvoke.net/default.aspx/Constants/WM.html[^]
which is the message that has to do with pressing the Enter key and the TAB key?
I try with WM_KEYDOWN , but it seems that the enter and the tab key are not handled.
Thank you !
|
|
|
|
|
It's been a while since I did ought like this but the WM_CHAR message should contain the key that actually went "down" I think
|
|
|
|
|
I try the WM_CHAR too , but doesn't work for TAB and Enter.
|
|
|
|
|
Er.. yes it does... how are you checking for those keys
|
|
|
|
|
Protected Overrides Sub WndProc(ByRef m As Message)
If m.Msg = WM_CHAR Then
Return
End If
MyBase.WndProc(m)
End Sub
End Class
all the other keys are blocked , but if TAB or Enter key is pressed then MyBase.WNDProc(m) is executed.
|
|
|
|
|
This will capture all of the keys using the ProcessCmdKey override rather than WndProc
Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean
Const WM_KEYDOWN As Integer = &H100
If ((msg.Msg = WM_KEYDOWN)) Then
Select Case (keyData)
Case Keys.Tab
Me.Label1.Text = "Tab Key Captured"
Case Keys.Enter
Me.Label1.Text = "Enter Key Captured"
Case Keys.Return
Me.Label1.Text = "Return Key Captured"
Case Else
Me.Label1.Text = keyData.ToString
End Select
End If
Return MyBase.ProcessCmdKey(msg, keyData)
End Function But I really don't understand your problem as this also works for me.
Protected Overrides Sub WndProc(ByRef m As Message)
Const WM_CHAR = &H102
If m.Msg = WM_CHAR Then
Return
End If
MyBase.WndProc(m)
End Sub
|
|
|
|
|
Thank you !
The problem with my code is that all other keys are blocked for the control , except the TAB key and Enter key.
If you have test my code , you should see that for the control , all the other keys are blocked inside the IF . But for Tab key and Enter key , the IF condition is always false , and the standart WNDProc is executed.
|
|
|
|
|
sorry but I can't use your function ProcessCMD.
The reason is that I'm usng NativeWindow , and when I try to use your function , I get an error
'ProcessCmdKey' is not a member of 'System.Windows.Forms.NativeWindow'.
What can I do ?
This is my whole class that actually I'm using :
Class NW
Inherits NativeWindow
Public Sub New(hwnd As IntPtr)
AssignHandle(hwnd)
End Sub
Const WM_NCHITTEST As Integer = &H84
Const WM_CHAR As Integer = &H102
Protected Overrides Sub WndProc(ByRef m As Message)
If m.Msg = WM_NCHITTEST OrElse m.Msg = WM_CHAR Then
Return
End If
MyBase.WndProc(m)
End Sub
<pre>
End Class</pre>
|
|
|
|
|
Sorry - I'm about to head off to the airport and won't get a chance to look at this properly.
My advice is to post a question in Quick Answers forum - put in a link to this thread and include the code that you have posted here (you could also post the code I suggested and explain that it didn't work, so everything is in one place).
Hopefully someone else will be able to pick it up while I'm away.
P.S. - If anyone tells you off for cross-posting point them to this post and I'll take the flack
|
|
|
|
|
Hi there,
I'm trying to create a property in vb like FolderBrowserDialog.SelectedPath wich is a string but it has a button to open the FolderBrowserDialog to select the path. please help me.
thanks.
|
|
|
|
|
- Properties don't have buttons. Forms have buttons.
- What kind of help do you need?
The difficult we do right away...
...the impossible takes slightly longer.
|
|
|
|
|
I need to create a property just like the SelectedPath but for another control.
|
|
|
|
|
Why not just create a button that opens the FolderBrowserDialog when clicked?
|
|
|
|
|
Ok but how do I put that button in the PropertyGrid??
|
|
|
|
|
|
|
Hello !
When a condition is true I want to make all the controls inside a groupbox not usable by users but without disabling them.
This is the code I use :
Class NW
Inherits NativeWindow
Public Sub New(hwnd As IntPtr)
AssignHandle(hwnd)
End Sub
Const WM_NCHITTEST As Integer = &H84
Protected Overrides Sub WndProc(ByRef m As Message)
If m.Msg = WM_NCHITTEST Then
Return
End If
MyBase.WndProc(m)
End Sub
End Class
Dim nwss As List(Of NW) = Nothing
Public Sub block_area(flag As Boolean)
If flag = True AndAlso IsNothing(nwss) Then
nwss = New List(Of NW)()
For Each c As Control In GroupBox1.Controls
nwss.Add(New NW(c.Handle))
Next
Else
If flag = False And (Not IsNothing(nwss)) Then
For Each nw As Object In nwss
nw.ReleaseHandle()
Next
nwss = Nothing
End If
End If
End Sub
The problem is that this code works for all controls , except the TextBox and DateTimePicker. These 2 controls remain always clickable and editable.
What's wrong ?
Thank you !
|
|
|
|
|
Try enable and / or readonly
|
|
|
|