What's the data type of the column in your database?
cgeier 187 Junior Poster
Subtitle Editor 3.3.15 Changelog
Installer version, .NET 2-3.5, 32-bit (will run on win 64-bit too, but needs 32-bit codecs/VLC)
cgeier 187 Junior Poster
Btw, that's the answer I gave you in my second post.
cgeier 187 Junior Poster
It appears that you are creating a new instance of Form2 which is why your data is not updated. What do you consider a "Preview". A copy of the form that can be modified? Or an image of the form that one can look at? If you are looking to provide an image, look up "screen capture" and/or "window capture". If you want to use a new instance of your form, look at the tutorial on form to form communication. You could create your other instance of Form2 (previewFrm2) : Private previewFrm2 as New Form2
. Change the "Modifiers" on Form2 to public. When you receive the data updates on the main form, you can set the values on previewFrm2 to the same values (previewFrm2.TextBox1.Text = "new text value")
cgeier 187 Junior Poster
I think that you don't understand the difference between sub, function, module, and class.
Here's a basic description:
A "Function" is basically a "Sub" that returns a value.
Functions and Subs (as well as other things) are contained within Classes and/or Modules.
cgeier 187 Junior Poster
You haven't posted any code so it's difficult to know exactly what you are doing. Using WebBrowser1.Navigate("http://www.yourUrl", True)
will open the url in a browser (IE) window. While using WebBrowser1.Navigate("http://www.yourUrl", False)
or WebBrowser1.Navigate("http://www.yourUrl")
will open it in your WebBrowser control (ex: WebBrowser1)
cgeier 187 Junior Poster
Have you checked the value of "intDays" after you call "getDaysOut(intDays)"?
You have the following:Private Sub getDaysOut(intDays As Integer)
it should be:Private Sub getDaysOut(ByRef intDays As Integer)
If you don't include "ByRef", the default is to pass the parameter "ByVal".
An alternative is:
Private Function getDaysOut() As Integer
Dim intDays As Integer = 0
Console.Write("How many days did the customer have the DVD? ")
If Int32.TryParse(Console.ReadLine(), intDays) Then
getDaysOut = intDays
Else
getDaysOut = 0
End If
End Function
Usage:
Dim intDays As Integer = 0
intDays = getDaysOut()
...
Resource:
How to: Force an Argument to Be Passed by Value (Visual Basic)
...When you pass a variable by reference, you must use the ByRef keyword to specify this mechanism.
The default in Visual Basic is to pass arguments by value...
cgeier 187 Junior Poster
If you right-click the file and "Send To" => "Compressed (Zipped) Folder", you can attach it.
cgeier 187 Junior Poster
You can do the following:
Add Imports System.Text.RegularExpressions
Create a class named "VideoInfo.vb".
VideoInfo.vb:
Public Class VideoInfo
Public Property videoNumber As String
Public Property name As String
Public Sub New()
End Sub
Public Sub New(ByVal videoNumber As String, ByVal name As String)
Me.videoNumber = videoNumber
Me.name = name
End Sub
End Class
We will use the above class inside the following function.
Private Function extractData(ByVal myData As String) As List(Of VideoInfo)
'create new list for video info
Dim videoInfoList As New List(Of VideoInfo)
'pattern that we want to find
'use named groups
Dim pattern As String = "/video(?<vidNumber>[0-9]+)/[0-9]?/(?<vidName>[A-Za-z0-9]+)"
'look for a match
Dim myMatch As Match = Regex.Match(myData, pattern)
'keep looking for matches until no more are found
While myMatch.Success
'get groups
Dim myGroups As GroupCollection = myMatch.Groups
'store extracted info in an instance of VideoInfo
Dim myVideoInfo As New VideoInfo
myVideoInfo.videoNumber = myMatch.Groups("vidNumber").Value
myVideoInfo.name = myMatch.Groups("vidName").Value
'add video info to the list
videoInfoList.Add(myVideoInfo)
'get next match
myMatch = myMatch.NextMatch()
End While
Return videoInfoList
End Function
To use it:
Dim myData As String = String.Empty
Dim myVideoInfo As List(Of VideoInfo)
Dim output As String = String.Empty
myData += "<p><a href=""/video7419004/0/CoD4"">CoD4</a></p>"
myData += "<p><a href=""/video7419005/0/CoD5"">CoD5</a></p>"
myData += "<p><a href=""/video7419006/0/CoD6"">CoD6</a></p>"
myVideoInfo = extractData(myData)
For Each video In myVideoInfo
output += "video: " & video.videoNumber & " " & video.name
output += System.Environment.NewLine
Next
'display for testing purposes
MessageBox.Show(output)
Resources:
cgeier 187 Junior Poster
You can use XMLSerializer. To hold the data from the XML file, I use two classes. I will call them "UserListInfo.cs" and "UserInfo.cs"--you can name them anything you want (it is possible to specify that the element name is different from the class name).
UserInfo.cs:
Add
using System.Xml.Serialization;
[XmlRootAttribute(ElementName="user")] public class UserInfo { public string userid { get; set; } public string username { get; set; } public string password { get; set; } public string email { get; set; } }//class
Note: ElementName="user" specifies that the element name is "user", not "UserInfo". The default is to use the class name unless otherwise specified.
UserListInfo.cs:
Add
using System.Xml.Serialization;
[XmlRootAttribute(ElementName = "usersList")] public class UserListInfo { //Element [XmlElement()] public List<UserInfo> user = new List<UserInfo>(); }//class
Note: ElementName="usersList" specifies that the element name is "usersList", not "UserListInfo".
To read the data:
Version 1 (uses BufferedStream):
private void deserializeFromXml(string filename)
{
//create new instance of UserListInfo
UserListInfo myUserListInfo = new UserListInfo();
using (FileStream fs = File.Open(filename,FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (BufferedStream bs = new BufferedStream(fs))
{
using (StreamReader sr = new StreamReader(bs))
{
//create new instance of XmlSerializer
XmlSerializer deserializer = new XmlSerializer(myUserListInfo.GetType());
myUserListInfo = (UserListInfo)deserializer.Deserialize(sr);
sr.Close();
bs.Close();
fs.Close();
}//using
}//using
}//using
string output = string.Empty;
for (int i = 0; i < myUserListInfo.user.Count; i++)
{
output += myUserListInfo.user[i].userid;
output += " " + myUserListInfo.user[i].password;
output += System.Environment.NewLine;
}//for
//print out the data for testing purposes
MessageBox.Show(output);
}//deserializeFromXml
Version 2:
private void deserializeFromXml(string filename) …
cgeier 187 Junior Poster
What are you using to view the initial web page?
cgeier 187 Junior Poster
See above where it says: usage of the attached file.
cgeier 187 Junior Poster
Can read data into a DataTable, manipulate it, then save it back to the file.
cgeier 187 Junior Poster
Your connection string is incorrect.
Should be:"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Video Rental System\DvDSystem1.accdb"
Also add the following:
Catch ex As OleDB.OleDbException
cgeier 187 Junior Poster
You haven't set txttotal.Text = ""
or txttotal.Text = Nothing
in "txtamount_TextChanged" or "txtquantity_TextChanged" if txtamount or txtquantity is null or empty.
cgeier 187 Junior Poster
The following seems to work:
Create a new project:
- Click "File" (in menu)
- Select "New Project"
- Double-click "Visual C#" to expand
- Click "Web"
- Select "ASP .NET Web Application"
- Enter a name, and click "OK"
Open Solution Explorer:
- Click "View" (in menu)
- Select "Solution Explorer"
Add a DataSet to the project:
- Click "Project" (in menu)
- Select "Add New Item"
- Under "Installed Templates" (left side), under "Visual C#", Click "Data"
- Select "DataSet"
- Click "Add"
- Click "View" (in menu)
- Select "ToolBox"
- Double-click "TableAdapter"
- Select an existing connection (or click "New Connection" and fill out the form)
- Click Next
- Click Next
- Leave "Use SQL Statements" radio button checked. Click "Next"
- Click "QueryBuilder"
- Select "Language" table
- Click "Add"
- Click "Close"
- Check "LanguageID", "LanguageName", and "MotherTongueLanguageName" checkboxes
- Click "OK"
- Click "Next"
- Click "Finish"
Add a web page to display our data:
- Click "Project" (in menu)
- Select "Add new item"
- Under "Installed Templates" (left side), under "Visual C#", Click "Web"
- Select "Web Form"
- For name enter: "DisplayLanguageInfo.aspx"
- Click "Add"
In the "DisplayLanguageInfo.aspx" source code (source tab), replace:
<form id="form1" runat="server"> <div> </div> </form>
With the following:
<form id="form1" runat="server">
<p>
<asp:GridView ID="GridView1" runat="server" CssClass="DataWebControlStyle">
<HeaderStyle CssClass="HeaderStyle" />
<AlternatingRowStyle CssClass="AlternatingRowStyle" />
</asp:GridView>
</p>
</form>
In "Solution Explorer":
- Right-click "AddLanguageInfo.aspx"
- Select "View Code" (this will show "DisplayLanguageInfo.aspx.cs")
Replace:
protected void Page_Load(object sender, EventArgs e)
{
}
With the following:
protected void Page_Load(object sender, EventArgs e)
{
DataSet1TableAdapters.LanguageTableAdapter languageAdapter = new DataSet1TableAdapters.LanguageTableAdapter();
GridView1.DataSource = languageAdapter.GetData();
GridView1.DataBind(); …
cgeier 187 Junior Poster
cgeier 187 Junior Poster
Are you using the DataSet designer? If so, check the parameters by doing the following:
Open Solution Explorer:
- View
- Solution Explorer
- Click your dataset name (ex: DataSet1.xsd)
In Dataset Designer:
Right-click your table adapter (ex: LanguageTableAdapter) and select "Properties"
Double-click "InsertCommand" to expand it
- Click "..." on the right side of "Parameters"
Select "@MotherTongueLanguageName"
Ensure "DbType" is "String" (not AnsiString)
- Ensure "ProviderType" is "NVarChar" (not VarChar)
Repeat for "UpdateCommand" (both @MotherTongueLanguageName and @Original_MotherTongueLanguageName)
cgeier 187 Junior Poster
The following is untested (and has the username and password replaced by an asterisk):
Private Function call_hitung_denda_function(ByVal idPinjam As Decimal, ByVal tgl As String) As Integer
Dim denda As Integer
Dim con As New OleDbConnection
Try
con.ConnectionString = "provider=msdaora; data source=xe; user id=*; password=*;"
con.Open()
'Dim cmd As OleDbCommand = New OleDbCommand("<package name>.hitung_denda", con)
Dim cmd As OleDbCommand = New OleDbCommand("hitung_denda", con)
cmd.CommandType = CommandType.StoredProcedure
'Dim returnval As New OleDbParameter("retval", OleDbType.Decimal, 100, ParameterDirection.ReturnValue, True, 0, 0, "denda", DataRowVersion.Current, "")
Dim returnval As New OleDbParameter()
returnval.ParameterName = "returnval"
returnval.OleDbType = OleDbType.Decimal
returnval.Direction = ParameterDirection.ReturnValue
cmd.Parameters.Add(returnval)
cmd.Parameters.Add("idPinjam", OleDbType.Decimal, 5).Value = idPinjam
cmd.Parameters.Add("tgl", OleDbType.VarChar, 40).Value = tgl
'execute cmd
'returns number of rows affected
cmd.ExecuteNonQuery()
'returns the first column in the first row
'of the result set
'cmd.ExecuteScalar()
'denda = cmd.Parameters("returnval").Value
denda = returnval.Value
Label8.Text = CStr(denda)
Catch ex As OleDb.OleDbException
MsgBox(ex.Message, MsgBoxStyle.Critical, "Error")
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "Error")
Finally
'close connection
If con.State = ConnectionState.Open Then
con.Close()
End If
'dispose connection
con.Dispose()
End Try
Return denda
End Function
Resources:
Note: Some of the code is adapted from C#.
cgeier 187 Junior Poster
First of all, I've found the following related to the provider "MSDAORA" (Microsoft OLE DB Provider for Oracle):
Microsoft OLE DB Provider for Oracle
"...This feature will be removed in a future version of Windows. Avoid using this feature in new development work, and plan to modify applications that currently use this feature. Instead, use Oracle’s OLE DB provider..."
Also, you create a parameter "returnvalue" but never "add" it to "cmd": cmd.Parameters.Add(returnval)
. Additionally, you don't have any code that would execute the command.
cgeier 187 Junior Poster
"...By default, an expression that contains only constant values causes a compiler error if the expression produces a value that is outside the range of the destination type. If the expression contains one or more non-constant values, the compiler does not detect the overflow..."
"...By default, these non-constant expressions are not checked for overflow at run time..."
...Overflow checking can be enabled by compiler options, environment configuration, or use of the checked keyword..."
public static long Factor(int number)
{
long result = 1;
try
{
//enables overflow checking
checked
{
for (int x = 1; x <= number; x++)
{
result *= x;
}//for
}//checked
}//try
catch (OverflowException ex)
{
//Console.WriteLine("Error: " + ex.Message);
throw new OverflowException();
}//catch
return result;
}//Factor
20! = 2,432,902,008,176,640,000
21! = 51,090,942,171,709,440,000
Max long: 9,223,372,036,854,775,807
Or in scientific (exponential) notation:
20! = 2.432902008176640E+18
21! = 51.090942171709440E+18
Max long: 9.223372036854775807E+18
*Note: I put all numbers above in E+18 for easier comparision.
Using 'long' data type:
21! will throw an OverflowException
providing that you have enabled overflow checking.
Other resources:
Arithmetic Overflow Checking using checked/unchecked
cgeier 187 Junior Poster
This can happen with improper usage of backgroundworker. You can use properties and/or constructors to pass data to your class.
I'm confused. Can you post your code. Or portions of your code that include the relavent information.
cgeier 187 Junior Poster
Try adding "N" in front of the unicode data:
TRUNCATE TABLE [dbo].[Language]
SET NOCOUNT ON
INSERT INTO [Language] VALUES ('English',N'English') -- 1
INSERT INTO [Language] VALUES ('French',N'Français') -- 2
INSERT INTO [Language] VALUES ('Spanish',N'Español') -- 3
Insert Into [Language] Values ('Russian', N'русский')
SET NOCOUNT OFF
GO
SQL Server multi language data support
"...When dealing with Unicode string constants in SQL Server you must precede all Unicode strings with a capital letter N, as documented in the SQL Server Books Online topic "Using Unicode Data". The "N" prefix stands for National Language in the SQL-92 standard, and must be uppercase. If you do not prefix a Unicode string constant with N, SQL Server will convert it to the non-Unicode code page of the current database before it uses the string..."
nchar and nvarchar (Transact-SQL)
Using Unicode Data
Unicode constants are specified with a leading N: N'A Unicode string'.
The following is listed for older versions of SQL Server:
You must precede all Unicode strings with a prefix N ...
"...Any time you pass Unicode data to SQL Server you must prefix the Unicode string with N..."
cgeier 187 Junior Poster
cgeier 187 Junior Poster
Sorry, I'm not going to debug your whole program for you. Place "MessageBox.Show()" and/or "Console.WriteLine()" statements throughout your code to help you find out what is executing and what is not.
ex:
MessageBox.Show("Before if 1")
Console.WriteLine("Before if 1")
...
MessageBox.Show("Inside if 1")
Console.WriteLine("Inside if 1")
...
MessageBox.Show("After if 1")
Console.WriteLine("After if 1")
...
cgeier 187 Junior Poster
Try changing:
Private allInventory As New Inventory
To:
Private allInventory As New List(Of Inventory)
Add allInventory.Add(objInventory)
here:
...
'Display data in text boxes.
DisplayInput(objInventory)
'--------------------------
' Add objInventory to list
'--------------------------
allInventory.Add(objInventory)
'Display inventory number in list box.
lstInventory.Items.Add(objInventory.InventoryNumber)
...
Change:
For Each InventoryNumber In allInventory
lstInventory.Items.Add(InventoryNumber)
Next
To:
For Each item As Inventory In allInventory
lstInventory.Items.Add(item.InventoryNumber)
Next
Change:
objInventory = CType(allInventory.Item(InventoryNumber), Inventory)
To:
objInventory = allInventory(lstInventory.SelectedIndex)
There is an error in your constructor in "Inventory.vb".
decCost = String.Empty
"decCost" is declared as the following:
Private decCost As Decimal
decCost should be a Decimal value.
The same problem exists with "decretailPrice". Additionally, "IntqtyOnHand" is an Integer, not a String.
cgeier 187 Junior Poster
You haven't fixed your original problem. In your first post you do the following (line 34):
Dim stringrecord As String
The next time you reference "stringrecord" is in line 60:
stringfield =stringrecord .Split(",")
"stringrecord" is null because it hasn't been set to any value.
It should be:
stringfield =strline.Split(",")
Additionally, in lines 63-65, numrecord
should be countnum
'now i will store into listproduct
listproduct(countnum).nameproduct = stringfield(0)
listproduct(countnum).catalogcode = stringfield(1)
listproduct(countnum).wholesade = stringfield(2)
listproduct(countnum).saleprice = stringfield(3)
Comment out your "Try-Catch" statements and you will be able to see where your code is throwing errors (in the debugger).
cgeier 187 Junior Poster
Is your Win 8.1 32-bit or 64-bit? What version of Outlook (year and 32-bit or 64-bit)?
Developing Outlook 2010 Solutions for 32-Bit and 64-Bit Systems
cgeier 187 Junior Poster
I think that you left out some "details".
In menu:
- Click "File"
- Select "Add"
OR
In solution explorer:
- Right-click "Solution"
The remaining steps are the same for either:
- Select "Add"
- Select "New Project"
- Double-click "Other Project Types" (to expand it)
- Double-click "Setup and Deployment" (to expand it)
- Click "Visual Studio Installer" (to select it)
- Click "Setup Wizard" (to select it)
- Click "Next"
- Click "Next"
- Check "Primary output from <project name>" checkbox
- Click "Next"
- Click "Next"
- Click "Finish"
After opening the project, try the following:
Open Solution Explorer:
* Click "View" in the menu bar
* Select "Solution Explorer"
cgeier 187 Junior Poster
Here's "doTasks" that is in the attached file above:
Public Sub doTasks(ByVal username As String, _
ByVal ToolStripStatusLabel1 As ToolStripStatusLabel, _
ByVal StatusStrip1 As StatusStrip, _
ByVal MenuStrip1 As MenuStrip, _
ByVal databaseProduct As String)
Dim errMessage As String = String.Empty
Dim permissionsDt As DataTable = Nothing
'set private variable values
'used by other methods
_ToolStripStatusLabel1 = ToolStripStatusLabel1
_StatusStrip1 = StatusStrip1
Try
If databaseProduct = "SQLExpress" Then
'get user permissions from db
permissionsDt = getPermissionsSQLExpress(username)
ElseIf databaseProduct = "mySQL" Then
'get user permissions from db
permissionsDt = getPermissionsMySQL(username)
Else
errMessage = "Error: (doTasks): " & " Database product not supported. "
errMessage += "Must be 'SQLExpress' or 'mySQL'."
MessageBox.Show(errMessage)
ToolStripStatusLabel1.Text = errMessage
_StatusStrip1.Refresh()
End If
If permissionsDt IsNot Nothing Then
setPermissions(permissionsDt, MenuStrip1)
End If
Catch ex As Exception
errMessage = "Error: (doTasks): " & ex.Message
MessageBox.Show(errMessage)
ToolStripStatusLabel1.Text = errMessage
_StatusStrip1.Refresh()
End Try
End Sub
cgeier 187 Junior Poster
The following will show how to hide/show a menu based on user rights/permissions using a database that uses the structure in my post(s) above. There are most likely other ways of doing this, but the way I decided to do it was by making use of recursion. I use Dictionary and List in the process.
Ensure that you have SQLExpress or mySQL installed.
In this example, I use a database named "UserApp". So, create a new database named "UserApp". And create the file structure as previously described. Do not enter the sample data yet as I have made some slight modifications that will eliminate the need for some of the data. I require that only the youngest ToolStripMenuItem be entered in the database. It will be assumed that a user will also need access to all of the menus ancestors (parents).
Create a form named "Form1.vb" and add the following to it:
- Add a ComboBox named "ComboBox1" to the form.
- Add a Button named "Button1" to the form.
- Add a StatusStrip named "StatusStrip1" to the form. Then add a StatusLabel named ToolStripStatusLabel1" to "StatusStrip1".
- Add a MenuStrip named "MenuStrip1" to the form. Then create the following structure in MenuStrip1:
File menu:
- File => Backup
- File => Exit
Tools menu:
- Tools => Accounting
- Tools => Employee => EmployeeSubMenu1
- Tools => Employee => EmployeeSubMenu2
- Tools => Order Entry
- Tools => Refresh
Create a module named "AppPermissionsModule.vb".
For SQLExpress, add the following Imports statement: Imports System.Data.SqlClient
For mySQL, ensure …
This attachment is potentially unsafe to open. It may be an executable that is capable of making changes to your file system, or it may require specific software to open. Use caution and only open this attachment if you are comfortable working with zip files.
cgeier 187 Junior Poster
No one has any idea what you are talking about when you say "Everything points to c:\Program Files(x86)\Default Company Name". Provide some code.
cgeier 187 Junior Poster
My previous post was incorrect. Don't add Namespace My
to "resultex". Change line #23 in "MyApplication" to:
Me.MainForm = My.Forms.resultex
The format is: Me.MainForm = My.Forms.<your form name to start>
cgeier 187 Junior Poster
You might try moving value.Dispose();
inside the closing bracket of the using statement:
using (Graphics graphicsHandle = Graphics.FromImage(TempImage))
{
...
if (value != null)
{
value.Dispose();
}//if
}//end using
cgeier 187 Junior Poster
...it could be related to using a "using" statement.
using Statement (C# Reference)
File and Font are examples of managed types that access unmanaged resources (in this case file handles and device contexts). There are many other kinds of unmanaged resources and class library types that encapsulate them. All such types must implement the IDisposable interface.
You can instantiate the resource object and then pass the variable to the using statement, but this is not a best practice. In this case, the object remains in scope after control leaves the using block even though it will probably no longer have access to its unmanaged resources. In other words, it will no longer be fully initialized. If you try to use the object outside the using block, you risk causing an exception to be thrown. For this reason, it is generally better to instantiate the object in the using statement and limit its scope to the using block.
Image.Dispose
Calling the Dispose method allows the resources used by this Image to be reallocated for other purposes.
Call Dispose when you are finished using the Image. The Dispose method leaves the Image in an unusable state. After calling Dispose, you must release all references to the Image so the garbage collector can reclaim the memory that the Image was occupying. For more information, see Cleaning Up Unmanaged Resources and Implementing a Dispose Method.
Always call Dispose before you release your last reference to the Image. Otherwise, the resources …
cgeier 187 Junior Poster
It may be related to how garbage collection is occuring.
See the following post:
Does garbage collection run during debug
The following post may also be of use:
How to debug .net Garbage Collection
It contains some additional links.
cgeier 187 Junior Poster
I believe that your overall memory issues are probably due to the manner in which you use locking. The rest of your code would need to be examined. Unfortunately, I'm not familiar with locking in C#.
cgeier 187 Junior Poster
cgeier 187 Junior Poster
You haven't show your declaration for "ImageCenterLock". I haven't used lock, but you should only maintain your lock as long as you need it. I'm not familiar with the implementation of lock in C#, but I believe your issue may be because you are returning before releasing the lock.
"The return statement terminates execution of the method in which it appears and returns control to the calling method. It can also return an optional value. If the method is a void type, the return statement can be omitted.
If the return statement is inside a try block, the finally block, if one exists, will be executed before control returns to the calling method."
Try commenting out value.Dispose();
and moving the closing bracket for your lock before the return statement.
//value.Dispose(); //clear out the passed in image (seems to drastically reduce memory usage)
}//release lock
return TempImage;
}//ResizeCenter
Note: In my limited research, I couldn't find an example of "lock" being used in a method that returns a value. It may be possible that if you return before releasing the lock, the lock may be maintained and result in deadlocking. Which would explain the high memory usage.
cgeier 187 Junior Poster
I would say because class "resultex" is missing Namespace My
which happens to be referenced in line #23 in "MyApplication" (Me.MainForm = My.Forms.MainForm
). See line #11 & #27 in "MyApplication" for the placement (the position it should be in within "resultex").
cgeier 187 Junior Poster
You may consider storing the MenuStrip (ToolStripMenuItem) variable names in the database.
ex:
- FileToolStripMenuItem
- BackupToolStripMenuItem
- ExitToolStripMenuItem
- ToolsToolStripMenuItem
- AccountingToolStripMenuItem
- EmployeeToolStripMenuItem
The database structure will stay the same. The sample data in two of the tables will change as follows:
AppPermission:
AppGroupPermission:
The attachment preview is chopped off after the first 10 KB. Please download the entire file.
{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff0\deff0\stshfdbch0\stshfloch31506\stshfhich31506\stshfbi31506\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;}
{\f37\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\f38\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Tahoma;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;}
{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}
{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f40\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f41\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
{\f43\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f44\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f45\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f46\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
{\f47\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f48\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f380\fbidi \froman\fcharset238\fprq2 Cambria Math CE;}{\f381\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}
{\f383\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f384\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f387\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;}{\f388\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);}
{\f410\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f411\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\f413\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\f414\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}
{\f417\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f418\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\f420\fbidi \fswiss\fcharset238\fprq2 Tahoma CE;}{\f421\fbidi \fswiss\fcharset204\fprq2 Tahoma Cyr;}
{\f423\fbidi \fswiss\fcharset161\fprq2 Tahoma Greek;}{\f424\fbidi \fswiss\fcharset162\fprq2 Tahoma Tur;}{\f425\fbidi \fswiss\fcharset177\fprq2 Tahoma (Hebrew);}{\f426\fbidi \fswiss\fcharset178\fprq2 Tahoma (Arabic);}
{\f427\fbidi \fswiss\fcharset186\fprq2 Tahoma Baltic;}{\f428\fbidi \fswiss\fcharset163\fprq2 Tahoma (Vietnamese);}{\f429\fbidi \fswiss\fcharset222\fprq2 Tahoma (Thai);}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;}
{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\fhimajor\f31536\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}
{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}
{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}
{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;
\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\*\defchp \f31506\fs22 }{\*\defpap
\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1
\af0\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 \sqformat \spriority0 Normal;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\*
\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31506\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext11 \ssemihidden \sunhideused Normal Table;}{\*\ts15\tsrowd
\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10
\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv
\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon11 \snext15 \spriority59 \styrsid14307809
Table Grid;}{\s16\ql \li720\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\itap0\contextualspace \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033
\sbasedon0 \snext16 \sqformat \spriority34 \styrsid15945440 List Paragraph;}{\s17\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af38\afs16\alang1025 \ltrch\fcs0
\f38\fs16\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext17 \slink18 \ssemihidden \sunhideused \styrsid8259861 Balloon Text;}{\*\cs18 \additive \rtlch\fcs1 \af38\afs16 \ltrch\fcs0 \f38\fs16
\sbasedon10 \slink17 \slocked \ssemihidden \styrsid8259861 Balloon Text Char;}}{\*\listtable{\list\listtemplateid-1745704094\listhybrid{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext
\leveltemplateid67698703\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi
cgeier 187 Junior Poster
To get a list of menus that exist in the MenuStrip (ex: MenuStrip1):
I use a class called "MenuInfo" to store the data.
MenuInfo.vb
Public Class MenuInfo
Public Property name As String
Public Property depth As Integer
Public Property parent As String
'constructor
Public Sub New()
End Sub
'constructor
Public Sub New(ByVal name As String, ByVal depth As Integer, ByVal parent As String)
Me.name = name
Me.depth = depth
Me.parent = parent
End Sub
End Class
The following recursive method will get all of the sub-menus (DropDownItems). The initial call to "getToolStripChildMenuNames" is in "getToolStripMenuNames".
getToolStripChildMenuNames:
Private Sub getToolStripChildMenuNames(ByVal myToolStripMenuItem As ToolStripMenuItem, ByRef menuList As List(Of MenuInfo), ByRef depth As Integer)
'increment depth
depth += 1
For Each child As ToolStripMenuItem In myToolStripMenuItem.DropDownItems
'add menu name to list
menuList.Add(New MenuInfo(child.Name, depth, myToolStripMenuItem.Name))
'recursivesly call function to get all children
getToolStripChildMenuNames(child, menuList, depth)
Next
'decrement depth
depth -= 1
End Sub
The following method will get the menu names on the MenuStrip and call "getToolStripChildMenuNames" to get the sub-menus:
getToolStripMenuNames:
Private Sub getToolStripMenuNames(ByVal myMenuStrip As MenuStrip)
Dim output As String = String.Empty
'hold menu info
Dim menuList As New List(Of MenuInfo)
'keeps track of depth
Dim depth As Integer = 0
'get top level menus - File, Tools, etc...
For Each item As ToolStripMenuItem In myMenuStrip.Items
'add menu to list
menuList.Add(New MenuInfo(item.Name, depth, ""))
'get all child menu items - DropDownMenus
getToolStripChildMenuNames(item, menuList, depth)
Next
output = "List of Menus:" + System.Environment.NewLine + System.Environment.NewLine …
cgeier 187 Junior Poster
The code above in AppPermissionTbl is how to do it for SQL Server and SQL Server Express.
cgeier 187 Junior Poster
Some of the sample data didn't get posted in the proper place. The 30 minute cut-off didn't allow me to edit it further. Here's the sample data with it's table:
AppPermission:
AppGroup:
AppUser:
AppGroupPermission:
AppUserGroup:
Sample SQL Queries:
To get permissions for "user2":
SELECT AppGroupPermission.groupName, AppGroupPermission.permissionName
FROM AppGroupPermission
INNER JOIN AppUserGroup
ON AppGroupPermission.groupName = AppUserGroup.groupName
WHERE AppUserGroup.userId = 'user2'
To get permissions for "user2" along with the description of the permissions:
SELECT t2.groupName, t2.permissionName, AppPermission.description
FROM AppPermission
INNER JOIN
(SELECT AppGroupPermission.groupName, AppGroupPermission.permissionName
FROM AppGroupPermission
INNER JOIN AppUserGroup
ON AppGroupPermission.groupName = AppUserGroup.groupName
WHERE AppUserGroup.userId = 'user2') t2
ON t2.permissionName = AppPermission.name
Here's how to create a table programmatically:
Need to add Imports System.Data.SqlClient
Public Sub AppPermissionTbl()
Try
Using cn As New SqlConnection(connectStr)
Dim sqlText As String = String.Empty
sqlText = "CREATE TABLE AppPermission (name nvarchar(50) NOT NULL "
sqlText += "CONSTRAINT PK_AppPermission_name PRIMARY KEY, "
sqlText += "description nvarchar(100))"
'open connection
cn.Open()
'create new SqlCommand
Using sqlCmd As New SqlCommand(sqlText, cn)
'execute
sqlCmd.ExecuteNonQuery()
End Using
System.Windows.Forms.MessageBox.Show("Table created: AppPermission", "Table Created.", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Using
Catch ex As SqlClient.SqlException
System.Windows.Forms.MessageBox.Show("Error:: AppPermissionTbl: " & ex.Message, "Error - Create Table", MessageBoxButtons.OK, MessageBoxIcon.Error)
Catch ex As Exception
System.Windows.Forms.MessageBox.Show("Error:: AppPermissionTbl: " & ex.Message, "Error - Create Table", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
There are documents attached below (in rich text format) that contain …
The attachment preview is chopped off after the first 10 KB. Please download the entire file.
{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff0\deff0\stshfdbch0\stshfloch31506\stshfhich31506\stshfbi31506\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;}
{\f37\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\f39\fbidi \fmodern\fcharset0\fprq1{\*\panose 020b0609020204030204}Consolas;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;}
{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}
{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f40\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f41\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
{\f43\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f44\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f45\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f46\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
{\f47\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f48\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f380\fbidi \froman\fcharset238\fprq2 Cambria Math CE;}{\f381\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}
{\f383\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f384\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f387\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;}{\f388\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);}
{\f410\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f411\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\f413\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\f414\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}
{\f417\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f418\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\f430\fbidi \fmodern\fcharset238\fprq1 Consolas CE;}{\f431\fbidi \fmodern\fcharset204\fprq1 Consolas Cyr;}
{\f433\fbidi \fmodern\fcharset161\fprq1 Consolas Greek;}{\f434\fbidi \fmodern\fcharset162\fprq1 Consolas Tur;}{\f437\fbidi \fmodern\fcharset186\fprq1 Consolas Baltic;}{\f438\fbidi \fmodern\fcharset163\fprq1 Consolas (Vietnamese);}
{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}
{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}
{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;}{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}
{\fhimajor\f31536\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}
{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}
{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}
{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}
{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;
\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\*\defchp \f31506\fs22 }{\*\defpap \ql \li0\ri0\sa200\sl276\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0
\f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 \sqformat \spriority0 Normal;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\*
\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31506\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext11 \ssemihidden \sunhideused Normal Table;}{\*\ts15\tsrowd
\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10
\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv
\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon11 \snext15 \spriority59 \styrsid11170709
Table Grid;}{\s16\ql \li720\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\itap0\contextualspace \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033
\sbasedon0 \snext16 \sqformat \spriority34 \styrsid3300392 List Paragraph;}}{\*\listtable{\list\listtemplateid2043954980\listhybrid{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext
\leveltemplateid67698703\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li720\lin720 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67698713\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67698715\'02\'02.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-180\li2160\lin2160 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\
This attachment is potentially unsafe to open. It may be an executable that is capable of making changes to your file system, or it may require specific software to open. Use caution and only open this attachment if you are comfortable working with rtf files.
The attachment preview is chopped off after the first 10 KB. Please download the entire file.
{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff0\deff0\stshfdbch0\stshfloch31506\stshfhich31506\stshfbi31506\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;}
{\f37\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;}
{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}
{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f40\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f41\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
{\f43\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f44\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f45\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f46\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
{\f47\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f48\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f380\fbidi \froman\fcharset238\fprq2 Cambria Math CE;}{\f381\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}
{\f383\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f384\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f387\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;}{\f388\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);}
{\f410\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f411\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\f413\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\f414\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}
{\f417\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f418\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;}
{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\fhimajor\f31536\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}
{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}
{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}
{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;
\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\*\defchp \f31506\fs22 }{\*\defpap
\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1
\af0\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 \sqformat \spriority0 Normal;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\*
\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31506\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext11 \ssemihidden \sunhideused Normal Table;}{\*\ts15\tsrowd
\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10
\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv
\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon11 \snext15 \spriority59 \styrsid14307809
Table Grid;}{\s16\ql \li720\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\itap0\contextualspace \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033
\sbasedon0 \snext16 \sqformat \spriority34 \styrsid15945440 List Paragraph;}}{\*\listtable{\list\listtemplateid-1745704094\listhybrid{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext
\leveltemplateid67698703\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li720\lin720 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67698713\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67698715\'02\'02.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-180\li2160\lin2160 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67698703\'02\'03.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67698713\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li3600\lin3600 }{\listlevel\leveln
The attachment preview is chopped off after the first 10 KB. Please download the entire file.
{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff31507\deff0\stshfdbch31506\stshfloch31506\stshfhich31506\stshfbi31507\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;}
{\f37\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\f113\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Microsoft Sans Serif;}
{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;}{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f292\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
{\f293\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f295\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f296\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f297\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
{\f298\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f299\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f300\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f632\fbidi \froman\fcharset238\fprq2 Cambria Math CE;}
{\f633\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}{\f635\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f636\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f639\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;}
{\f640\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);}{\f662\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f663\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\f665\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}
{\f666\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\f669\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f670\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\f1422\fbidi \fswiss\fcharset238\fprq2 Microsoft Sans Serif CE;}
{\f1423\fbidi \fswiss\fcharset204\fprq2 Microsoft Sans Serif Cyr;}{\f1425\fbidi \fswiss\fcharset161\fprq2 Microsoft Sans Serif Greek;}{\f1426\fbidi \fswiss\fcharset162\fprq2 Microsoft Sans Serif Tur;}
{\f1427\fbidi \fswiss\fcharset177\fprq2 Microsoft Sans Serif (Hebrew);}{\f1428\fbidi \fswiss\fcharset178\fprq2 Microsoft Sans Serif (Arabic);}{\f1429\fbidi \fswiss\fcharset186\fprq2 Microsoft Sans Serif Baltic;}
{\f1430\fbidi \fswiss\fcharset163\fprq2 Microsoft Sans Serif (Vietnamese);}{\f1431\fbidi \fswiss\fcharset222\fprq2 Microsoft Sans Serif (Thai);}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;}
{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\fhimajor\f31536\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}
{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}
{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}
{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;
\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\*\defchp \f31506\fs22 }{\*\defpap
\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1
\af31507\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 \sqformat \spriority0 Normal;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\*
\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext11 \ssemihidden \sunhideused Normal Table;}}
{\*\rsidtbl \rsid2307826\rsid6754817\rsid6755269\rsid11736936\rsid12132599\rsid15234366}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\author CG}{\operator CG}
{\creatim\yr2014\mo5\dy23\hr22\min30}{\revtim\yr2014\mo5\dy23\hr22\min30}{\version2}{\edmins0}{\nofpages1}{\nofwords278}{\nofchars1591}{\nofcharsws1866}{\vern49273}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}
\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect
\widowctrl\ftnbj\aenddoc\trackmoves0\trackformatting1\donotembedsysfont1\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors1\noxlattoyen
\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1440\dgvorigin1440\dghshow1\dgvshow1
\jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct
\asianbrkrule\rsidroot12132599\newtblstyruls\nogrowautofit\usenormstyforlist\noindnmbrts\felnbrelev\nocxsptable\indrlsweleven\noafcnsttbl\afelev\utinl\hwelev\spltpgpar\notcvasp\notbrkcnstfrctbl\notvatxbx\krnprsnet\cachedcolbal \nouicompat \fet0
{\*\wgrffmtfilter 2450}\nofeaturethro
savedlema commented: Thank you very much. +2
cgeier 187 Junior Poster
My previous post used some reserved words. Also, I've worked on the db structure a little more.
The table names are as follows:
- AppPermission
- AppGroup
- AppUser
- AppGroupPermission
- AppUserGroup
AppPermission:
Version 1:
CREATE TABLE AppPermission (name nvarchar(50) NOT NULL
CONSTRAINT PK_AppPermission_name PRIMARY KEY,
description nvarchar(100))
AppGroup:
CREATE TABLE AppGroup (name nvarchar(50) NOT NULL
CONSTRAINT PK_AppGroup_name PRIMARY KEY,
description nvarchar(100))
AppUser:
CREATE TABLE AppUser (id nvarchar(25) NOT NULL
CONSTRAINT PK_AppUser_id PRIMARY KEY,
firstName nvarchar(50) NOT NULL,
lastName nvarchar(50) NOT NULL,
password nvarchar(25))
AppGroupPermission:
CREATE TABLE AppGroupPermission (groupName nvarchar(50) NOT NULL,
permissionName nvarchar(50) NOT NULL,
CONSTRAINT PK_groupName_permissionName
PRIMARY KEY(groupName, permissionName),
CONSTRAINT FK_AppGroupPermission_AppGroup_groupName
FOREIGN KEY (groupName)
REFERENCES AppGroup(name)
ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT FK_AppGroupPermission_AppPermission_permissionName
FOREIGN KEY (permissionName)
REFERENCES AppPermission(name)
ON DELETE CASCADE ON UPDATE CASCADE)
AppUserGroup:
CREATE TABLE AppUserGroup (userId nvarchar(25) NOT NULL,
groupName nvarchar(50) NOT NULL,
CONSTRAINT PK_userId_groupName
PRIMARY KEY(userId, groupName),
CONSTRAINT FK_AppUserGroup_AppGroup_groupName
FOREIGN KEY (groupName)
REFERENCES AppGroup(name)
ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT FK_AppUserGroup_AppUser_userId
FOREIGN KEY (userId)
REFERENCES AppUser(id)
ON DELETE CASCADE ON UPDATE CASCADE)
savedlema commented: Thank you very much. +0
cgeier 187 Junior Poster
The following will replace "<address>" with the text contained in RichTextBox1 and save the document as a .pdf file. The original file will be unmodified:
'use early binding
Dim objWordApp As Word.Application = Nothing
Try
objWordApp = New Word.Application
'Open an existing document.
objWordApp.Documents.Open("C:\Temp\Sample.docx")
'copy data to clipboard
RichTextBox1.SelectAll()
RichTextBox1.Copy()
'find <address>
objWordApp.Selection.Find.Execute("<address>")
'copy richtext from clipboard
objWordApp.Selection.PasteSpecial(DataType:=Word.WdPasteDataType.wdPasteRTF)
'clear the clipboard
Clipboard.Clear()
'save as PDF
objWordApp.ActiveDocument.SaveAs2("C:\Temp\Sample.pdf", Word.WdSaveFormat.wdFormatPDF)
'Close the document.
objWordApp.Documents.Close(Word.WdSaveOptions.wdDoNotSaveChanges)
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
'quit Word
If Not IsNothing(objWordApp) Then
objWordApp.Quit()
objWordApp = Nothing
End If
End Try
Note: You will need to be using a version of Word that allows a file to be save as ".pdf".
Resources:
How do I convert Word files to PDF programmatically
2007 Microsoft Office System Update: Redistributable Primary Interop Assemblies
Microsoft Office 2010: Primary Interop Assemblies Redistributable
How to open new file formats in earlier versions of Microsoft Office
Microsoft Office Compatibility Pack for Word, Excel, and PowerPoint File Formats
"...By installing the Compatibility Pack in addition to Microsoft Office 2000, Office XP, or Office 2003, you will be able to open, edit, and save files using the file formats in newer versions of Word, Excel, and PowerPoint . The Compatibility Pack can also be used in conjunction with the Microsoft Office Word Viewer 2003, Excel Viewer 2003, and PowerPoint Viewer 2003 to view files saved in these new formats..."
cgeier 187 Junior Poster
Store all of the menu names that will require access permissions in a table.
Create table: Menu
Column: name (PK)
or
Column: id (PK)
Column: name
Create table: Group
Column: name (PK)
Column: menuPermissions (PK); FK references Menu.name
Create table: UserPermission
Column: id (PK); FK references User.id
Column: groupName (PK); FK references Group.name
Create table: User
Column: id (PK)
Column: firstName
Column: lastName
Column: password
Add a permission for each menu item--some of the items you may be able to group together and some menu items may be dependent on others. If someone doesn't have access to the file menu, they shouldn't have access to the edit menu under file menu. The following is not tested:
Dim FileMenuAccess as Boolean = False
Dim FileEditMenuAccess as Boolean = False
Dim FileBackupMenuAccess as Boolean = False
...
If FileMenuAccess = True Then
'enable file menu
If FileEditMenuAccess = True Then
'enable file-edit menu
Else
'disable file-edit menu
End If
Else
'disable file menu
End If
Private Sub GetMenuPermissions()
'get menu permissions for user from database
End Sub
Or
You could use a dictionary:
Dim menuDict as New Dictionary(Of String, Boolean)
If menuDict.Contains("FileMenuAccess") Then
'enable file menu
If menuDict.Contains("FileEditMenuAccess") Then
'enable file-edit menu
Else
'disable file-edit menu
End If
Else
'disable file menu
End If
Private Sub GetMenuPermissions()
'get menu permissions for user from database
'add each menu permission to menuDict
End Sub
savedlema commented: Thank you very much. You solved my problem and now I'm okay. +2
cgeier 187 Junior Poster
That's not how it works in the real world. You need to identify your requirements and then figure out how to translate that into a program. How does one do that? Here are some steps to get you started:
- Get a copy of your transcript--so you know what one looks like
- Make an appointment with a few of your teachers. Tell them briefly about your project and ask them about the process they use to submit your grades. Ask him/her if there are any features that he/she would like that don't currently exist.
- Make an appointment with someone in the registrar's office, and find out as much as you can about the process they use to process student grades--you may need to meet with different people as they may do/use different parts. Take pictures or draw sketches of what you see. If a computer system already exists, you may be able to mimic what currently exists. If no computer system exists, document the current process--make sure to meet with multiple people to identify "best practices".
- Read a book on software engineering.
- Identify approximately how much data there will be. How does one do that? How many students are there at the university? Approximately how many classes does each student take each semester/quarter? Identify the best data structure to hold your data. In this case, it is probably a database. If we use a database, identify which database software can handle the amount of data that will be produced.
Note: …