|
Already done
|
|
|
|
|
Is it possible to insert rows in to a MS Access table with a Auto number field using a CommandBuilder. I tried that but it's getting following error.
Syntax error in Insert in to statement.
I did same thing to a table which doesn't have a auto number field. It worked. I think the problem is that auto number field. What's the solution for this problem.
|
|
|
|
|
I believe the problem may be that you are trying to pass a value for the auto number field. That would cause the insert to fail. In your Insert statement, list the fields you want to include, but don't list the Autonumber field, then in your value clause list only the values which need to be inserted.
remeber to vote
|
|
|
|
|
I didn't use any Insert statement. Just used CommandBuilder class to generate SQL statements
|
|
|
|
|
|
Hello,
I'm struggeling with a bit of a problem. I got a program that prints production forms using excel. the problem is users are printing batches of 300 or more of these. The Xerox WC 3745 printer driver cant keep up with this and crashes.
I'm looking for a way to merge these printer tasks. i already try'd merging the work sheets into one workbook. this didnt work to well...excel doenst like to handle more then 250 worksheets it seems. also merging all data from the worksheets into one massive worksheet doesn't work (the layout cell count ect. are not the same)
anyone able to point me in a possible solution? perhaps i could catch the printer jobs and resend them as one big job? or is there a way that makes excel to do it that i just didnt find yet?
following code is looped to start the print jobs in the current version:
If rbexact.Checked Then
workbook.PrintOutEx(1, 3, 1, False, verbinding.printer(), False, Collate:=True)
Else
workbook.PrintOutEx(1, 3, 1, False, DefaultPrinterName(), False, Collate:=True)
End If
|
|
|
|
|
This is going to sound like overkill, but ...
1) Create a directory on the machine which will hold a list of file names which need to be printed.
2) Create a windows service which monitors the directory by using a FileSystemWatcher, when it sees a file added to that directory it looks to the printer to see if there is a job currently printing, if so, make the job sleep for a 1 minute (or whatever). If the printer is available, then send the job.
I created a Service with a FileWatcher to do all kinds of asynchronous processing and it works really well. I log messages to the Event Log for easy troubleshooting / status.
http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx[^]
Remember to vote.
|
|
|
|
|
Hello David,
thanks for the idea's. the program is already creating a "spool" folder on the C:\temp to store its files before printing them. so its already using the method you described. The problem with it is that still every file is a differed printer job
As a side note: i totally agree to you when we talk about overkill. this program was initially created to print like 10 forms a week. but some people found it on the network and are now "abusing" it. I have a executing function, in other words i just get a mail about these problems with a note stacked to it saying 'fix it'
|
|
|
|
|
How about seeing if there is an updated printer driver first?
AFAIK, there's no way to combine many print jobs into a single job without rewriting the entire job from scratch. Writing the code to do that is not what I would call a productive use of your time.
It's not the most efficient solution, but how about throttling the print jobs? Send about 10 jobs at a time, wait, send another 10, wait, rinse and repeat.
|
|
|
|
|
hello Dave,
the drivers are already at there most recent version. the problem is on the printer tough. the printer itself gets an error and that makes the drivers crash. so unfortunately that wont help to much.
I already considered making batches of jobs to send. but the crashing of the printer inst the only issue with the program (i just left less important once out to shorten the post). A other problem i had was that when other people printed documents they got lost in the pile of papers. and it already happened once that those papers got onto the work floor (witch caused the necessary panic)
|
|
|
|
|
Nick Otten wrote: the drivers are already at there most recent version. the problem is on the
printer tough. the printer itself gets an error and that makes the drivers
crash. so unfortunately that wont help to much.
If that's the case, no amount of code you write is going to fix this problem.
See if there's a firmware update for the printer. If not, you're pretty much screwed. You can queue up the jobs or print onat a time, but if the printer is going to puke, there's nothing you can do about it, well, except replace the printer with a different one.
Nick Otten wrote: I already considered making batches of jobs to send. but the crashing of the
printer inst the only issue with the program (i just left less important once
out to shorten the post). A other problem i had was that when other people
printed documents they got lost in the pile of papers. and it already happened
once that those papers got onto the work floor (witch caused the necessary
panic)
This sounds like a procedural problem with people, not your app. There's isnot anything that's going to some this one, except maybe getting a printer dedicated to printing this stuff.
|
|
|
|
|
The error on the printer is coused by the speed and ammount of print job is has to swallow. if i print a file with the same amount of pages its not really a problem. I already updated the firmware to the newest version and even contacted Xerox for help. but they said the machines are just not made to handle printer tasks at the speed i send them.
Anyhow i indeed think its a lost cause to save this little application. i think i'm going to make a "spool file" on a network drive where all excel templates are stored. then during night time i make one of the background threads pick it up and print them, so the forms are all done the next morning. this way i can set it to a much lower speed (like 1 file per 10 seconds and something).
So all that last me now is to thank you very much for your help!
|
|
|
|
|
Nick Otten wrote: The error on the printer is coused by the speed and ammount of print job is has
to swallow. if i print a file with the same amount of pages its not really a
problem. I already updated the firmware to the newest version and even contacted
Xerox for help. but they said the machines are just not made to handle printer
tasks at the speed i send them.
That's a load of horse sh*t. The speed of the jobs is dictated by the printer, not the application. The printer signals it's ready and idle to its driver on the print server (the client machine) and the spooler sends the next job.
The spooler is insulating the printer from the applications print jobs. You can send as many jobs as you want as fast as you want. They all get sent to the spooler, not the printer. The printer won't know anything about it at all.
This is definitely a problem for Xerox to fix, not you.
Wanna try it? Swap the printer out, install the drivers and try your app unmodified on a different printer.
|
|
|
|
|
Well that's Xerox for you i guess. Or perhaps i just had a "first day helpdesk" person on the line i don't know, nor did i really care. It didn't work, they gave me that explanation. And with that it was pretty clear they didn't have a fix. Also printers aren't my responsibility so i didn't pay more attention to it.
fact remains that this app was initially written for 2 people in less then a hour to print like 10 forms in a weak. I choose to use excel instead of crystal reports because users "know" how to make something in excel, while crystal reports is the scary unknown for them. Gues it was a big mistake tough, its coming back at me pretty bad now.
|
|
|
|
|
Nick Otten wrote: I got a program that prints production forms using excel
Here is your problem - excel as a reporting tool. Wrong tool for the job.
Instead of busting your balls trying to make excel do something it is fundamentally not designed to do, spend the time rewriting the printing solution to something designed to do that job.
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
The program was initially written for 2 people in less then a hour to print like 10 forms in a weak. I choose to use excel instead of crystal reports because users "know" how to make something in excel, while crystal reports is the scary unknown for them.
Now however more users found out of this tool and some are using it for things it isn't really designed for. I asked my initial question to see if i could "boost" the program a bit to make it work. but i guess im just gone shake my first to them telling them they are abusing software/blocking them access.
|
|
|
|
|
Nick Otten wrote: Now however more users found out of this tool and some are using it for things it isn't really designed for
You know the reward for good work right!
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
I'm stumped.
I tried translating a class in c# to vb, and I'm stuck on this function.
For some reason, it's not looping around enough, to get the desired result.
So the input array is 0 0 6 089 0 0 12 176
and the output of converted is suppose to be "0000000000000000000001100101100100000000000000000000110010110010"
but I get 000000000000
Private Function ByteArrayToBitString(ByVal byteArray() As Byte) As String
Dim idx As Integer = 0
Dim jdx As Integer = 0
Dim newByteArray() As Byte = New Byte(byteArray.Length - 1) {}
Array.Copy(byteArray, newByteArray, byteArray.Length - 1)
Dim converted As String = ""
For idx = 0 To newByteArray.Length - 1
For jdx = 0 To 7
converted += If((newByteArray(idx) And &H80) > 0, "1", "0")
newByteArray(idx) <<= 1
jdx += 1
Next
idx += 1
Next
Return converted
End Function
I took out the code, to test the loop counts, and it comes up short on jdx, and the idx loops around 8 times.
I must of made a stupid mistake somewhere, but I can't figure where. Just looking for other eyes on the code, because I don't see it, perhaps my translation is wrong somewhere, but you should be able to get the idea.
|
|
|
|
|
jkirkerx wrote: the loop counts, and it comes up short on jdx, and the idx loops around 8 times.
It's doing what it looks like coded. Can you share your C# code? And a line on what is it doing?
|
|
|
|
|
I figured out the loop count, forgot for increments the counter automatically, so I had double increments. So that function is fixed now, I get the correct value string.
Now I'm stuck on this this function, I'm pretty close now, just the width is wrong, double the correct value, should be 650x325. Without the input stream, how would you know.
Sorry to post so much code, Trying to convert this
Sub Page Load()
Dim swf As SwfParser = New SwfParser
Dim swfRect As Drawing.Rectangle = New Drawing.Rectangle
swfRect = swf.get_SWF_Dimensions("p:/flash/Bowling_Jazz_Collection.swf")
Dim iWidth As Integer = swfRect.Width 'suppose to be 625, but is 1300
Dim iHeight As Integer = swfRect.Height 'I got this right 325
swf = Nothing
End Sub
public class SwfParser
{
public Rectangle GetDimensions(String filePath)
{
using (FileStream stream = File.OpenRead(filePath))
{
return GetDimensions(stream);
}
}
public Rectangle GetDimensions(Stream stream)
{
Stream inputStream = null;
byte[] signature = new byte[8];
byte[] rect = new byte[8];
stream.Read(signature, 0, 8);
if ("CWS" == System.Text.Encoding.ASCII.GetString(signature, 0, 3))
{
inputStream = new InflaterInputStream(stream);
}
else
{
inputStream = stream;
}
inputStream.Read(rect, 0, 8);
int nbits = rect[0] >> 3;
rect[0] = (byte)(rect[0] & 0x07);
String bits = ByteArrayToBitString(rect);
bits = bits.Remove(0, 5);
int[] dims = new int[4];
for (int i = 0; i < 4; i++)
{
char[] dest = new char[nbits];
bits.CopyTo(0, dest, 0, bits.Length>nbits ? nbits : bits.Length);
bits = bits.Remove(0, bits.Length > nbits ? nbits : bits.Length);
dims[i] = BitStringToInteger(new String(dest)) / 20;
}
return new Rectangle(0, 0, dims[1] - dims[0], dims[3] - dims[2]);
}
private int BitStringToInteger(String bits)
{
int converted = 0;
for (int i = 0; i < bits.Length; i++)
{
converted = (converted << 1) + (bits[i] == '1' ? 1 : 0);
}
return converted;
}
private String ByteArrayToBitString(byte[] byteArray)
{
byte[] newByteArray = new byte[byteArray.Length];
Array.Copy(byteArray, newByteArray, byteArray.Length);
String converted = "";
for (int i = 0; i < newByteArray.Length; i++)
{
for (int j = 0; j < 8; j++)
{
converted += (newByteArray[i] & 0x80) > 0 ? "1" : "0";
newByteArray[i] <<= 1;
}
}
return converted;
}
}
This is my conversion
Public Class SwfParser
Public Function get_SWF_Dimensions(ByVal filePath As String) As Rectangle
Dim fileLength As Long = 0
Dim stream As FileStream = New FileStream(filePath, FileMode.Open, FileAccess.Read)
Dim fsLen As Long = stream.Length
Dim rec As Rectangle = getDimensions(stream)
End Function
Private Function getDimensions(ByVal stream As Stream) As Rectangle
Dim inputStream As Stream = Nothing
Dim signature() As Byte = New Byte(8) {}
Dim rect() As Byte = New Byte(8) {}
stream.Read(signature, 0, 8)
If (System.Text.Encoding.ASCII.GetString(signature, 0, 3) = "CWS") Then
inputStream = New InflaterInputStream(stream)
Else
inputStream = stream
End If
inputStream.Read(rect, 0, 8)
Dim nbits As Integer = rect(0) >> 3
rect(0) = rect(0) And &H7
Dim bits As String = ByteArrayToBitString(rect)
bits = bits.Remove(0, 5)
Dim dims(4) As Integer
For idx As Integer = 0 To 3
Dim dest() As Char = New Char(nbits) {}
bits.CopyTo(0, dest, 0, If(bits.Length > nbits, nbits, bits.Length))
bits = bits.Remove(0, If(bits.Length > nbits, nbits, bits.Length))
dims(idx) = BitStringToInteger(New String(dest)) / 20
Next
Return New Rectangle(0, 0, dims(1) - dims(0), dims(3) - dims(2))
End Function
Private Function BitStringToInteger(ByVal bits As String) As Integer
Dim converted As Integer = 0
For idx As Integer = 0 To bits.Length - 1
converted = (converted << 1) + If(bits(idx) = "1", 1, 0)
Next
Return converted
End Function
Private Function ByteArrayToBitString(ByVal byteArray() As Byte) As String
Dim newByteArray() As Byte = New Byte(byteArray.Length - 1) {}
Array.Copy(byteArray, newByteArray, byteArray.Length - 1)
Dim converted As String = ""
For idx As Integer = 0 To newByteArray.Length - 1
For jdx As Integer = 0 To 7
converted += If((newByteArray(idx) And &H80) > 0, "1", "0")
newByteArray(idx) <<= 1
Next
Next
Return converted
End Function
End Class
|
|
|
|
|
Try:
Private Function BitStringToInteger(ByVal bits As String) As Integer
Dim converted As Integer = 0
For idx As Integer = 0 To bits.Length - 1
converted = (converted << 1) + If(bits(idx) = "1"C, 1, 0)
Next
Return converted
End Function
|
|
|
|
|
I'll give that a try Friday
For some reason, bits that is passed into the function, is 1 too long, in other words, the length is 1 bit bigger than it's suppose to be.
So I did a -2 on the length in the loop instead of -1, and the value is now correct. It's sloppy, just a band-aid, but overall in the end, the return value is correct.
I would like to fix it correctly, so let me give your fix a test in the morning.
Good job on isolating it down to that function, and thanks for helping me out Sandeep.
Private Function BitStringToInteger(ByVal bits As String) As Integer
Dim converted As Integer = 0
For i As Integer = 0 To bits.Length - 2 '<- chopped it down 1 more
converted = (converted << 1) + If(bits(i) = "1", 1, 0)
Next
Return converted
End Function
|
|
|
|
|
Hello,
I'm not sure but i think this would do the trick
dim output as string = System.Text.Encoding.Unicode.GetChars(your_byte_array)
hope it helps!
edit: oeps didn't see you already fixed it, never mind that i said something
modified 21-Jun-12 9:19am.
|
|
|
|
|
Is there a way that i can make a class to store passwords from my form1 or form2 to the Windows 7 Registry or a spot on the local Drive?
Public Class Form1
My.Computer.FileSystem.WriteAllText("C:\Pass\PasswordLog.txt", TextBoxLog.Text, True)
End Sub
End Class
or
SOME way to store in the registry... what would the code be for this ?
i tried and failed bad im sure... im a noob with VB but here is what i have for my class that stores passwords in the registry ....
<pre lang="vb">
Imports Microsoft.Win32
' Reads and writes the top three high scores to the registry.
Public Class Passwords
Shared Password As Integer
''' Read Passwords from the registry.
Public Shared Function GetPasswords() As Password()
Dim tops(1) As Password
Dim passKey As RegistryKey = Registry.CurrentUser.CreateSubKey("Software\VBSamples\Collapse\Passwords")
For index As Integer = 0 To 1
Dim key As String = "place" & index.ToString
Dim password As New Password(CStr(passKey.GetValue(key)))
tops(index) = password
Next
passKey.Close()
Return tops
End Function
' Update and write the Passwords.
Public Shared Sub UpdatePasswords(ByVal Password As Integer)
Dim tops(1) As Password
Dim passKey As RegistryKey = Registry.CurrentUser.CreateSubKey("Software\VBSamples\Collapse\Passwords")
tops(0) = New Password(passKey.GetValue("Place0").ToString)
If Password > tops(0).Password Then
Dim name As String = InputBox("New Password " & Password)
tops(1) = New Password("")
tops(1).Password = Password
Array.Sort(tops)
Array.Reverse(tops)
passKey.SetValue("Place0", tops(0).ToString)
End If
passKey.Close()
End Sub
' Set up the entries for new Passwords.
Shared Sub SetUpPasswords()
Dim passKey As RegistryKey = Registry.CurrentUser.CreateSubKey("Software\VBSamples\Collapse\Passwords")
If passKey.GetValue("Place0") Is Nothing Then
passKey.SetValue("Place0", "")
End If
passKey.Close()
End Sub
' Reset Passwords.
Shared Sub ResetPasswords()
Dim passKey As RegistryKey = Registry.CurrentUser.CreateSubKey("Software\VBSamples\Collapse\Passwords")
passKey.SetValue("Place0", "")
passKey.Close()
End Sub
End Class
For the Form1 or Form2 i was thinking something like :
Public Class Passwordz
Private Sub Passwordz_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.DataGrid1.DataSource = HighScores.GetHighScores()
End Sub
Private Sub resetPasswords_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles resetScores.Click
Passwords.ResetPasswords()
Me.DataGrid1.DataSource = Passwords.GetPasswords()
End Sub
End Class
</pre>
my Questions here is would something like this work and how would i go about doing it?
If you would like credit for any code you provide please say so and ill add your name on the project.
-- modified 18-Jun-12 13:41pm.
|
|
|
|
|
I'm kinda wondering why you're using passwords at all if you're happy to have them stored unencrypted in full public view?
|
|
|
|
|