|
|
Hello,
My Switchboard menu items takes the text from menutiems table.
Since I want to make the menu items according to the language of the country. I want to insert the menu text in local as beside the the English column. My question is how can we say in the menu text item of the form ithat it will take the text from the local column?
The Ooher alternative is to replace the English with the local language text, but it is not practical.
Thanks for any idea provided.
-- H. Frank Situmorang
|
|
Frank,
You could add a table to your database that contains fields (FormName, Language, CtrlName, CtrlProperty("Caption", "ControlTipText"), CtrlValue). Then when the user changes the language they want to use, you could run some code that loops through each of the forms (opening each form in design view, hidden), gets the list of control names, properties, and values, for that form, and updates the control properties. Then save and close the form. This is untested, but It you should get the idea.
Public Sub LanguageControls()
Dim frm As Form, intForm As Integer Dim ctrl As Control Dim strSQL As String, rs As DAO.Recordset For intForm = 0 To CurrentProject.AllForms.Count - 1 DoCmd.OpenForm CurrentProject.AllForms.Item(intForm).Name, acDesign Set frm = Forms(0) strSQL = "SELECT * FROM tbl_LanguageConversion " _ & "WHERE [FormName] = '" & frm.Name & "' " _ & " AND [Language] = 'French'" Set rs = CurrentDb.OpenRecordset(strSQL, , dbFailOnError) While Not rs.EOF set ctrl = frm.Controls(rs("CtrlName")) ctrl.Properties(rs("CtrlProperty")) = rs("CtrlValue") rs.MoveNext Wend rs.Close Set rs = Nothing DoCmd.Close acForm, frm.Name, acSaveYes Next End Sub
One issue with using this for captions is that if the new caption is longer than the old, and the label width is not wide enough, then you could cutoff some text. you might want to consider adding a line like:
if ctrl.controltype = acLabel then ctrl.sizetofit
-- HTH Dale
email address is invalid Please reply to newsgroup only.
"Frank Situmorang" wrote:
[Quoted Text] > Hello, > > My Switchboard menu items takes the text from menutiems table. > > Since I want to make the menu items according to the language of the > country. I want to insert the menu text in local as beside the the English > column. My question is how can we say in the menu text item of the form ithat > it will take the text from the local column? > > The Ooher alternative is to replace the English with the local language > text, but it is not practical. > > Thanks for any idea provided. > > > -- > H. Frank Situmorang
|
|
Thanks Dale for your explanantion.
My apporoach is creating a table for the individual form and for each source control label table I have them in many languages. I have tested it and it works. But this is for caption of the constrol source's label. I forget that for some source control propery I made a messgae on the control tip text property.
My question is how should I make again for the control tips text a table? and have the VBA as below? Can it work if I make the VBA: Me.Form.Caption = .Fields(1) Me.NamaAnggota_label.Control Tips Text = .Fields(2)
Something like that?
Dim db As DAO.Database Dim rst As DAO.Recordset Dim s As String On Error GoTo Err_Form_Open
Set db = DBEngine(0)(0) s = Nz(DFirst("Language", "tblDefaults"), "English") s = "SELECT * FROM [bukuangkby_label] WHERE Language = '" & _ s & "';" ' Debug.Print s ' for testing only Set rst = db.OpenRecordset(s, dbOpenForwardOnly) With rst If Not .EOF Then Me.Form.Caption = .Fields(1) Me.NamaAnggota_label.Caption = .Fields(2) ) End If .Close End With Set rst = Nothing Set db = Nothing
Exit_Form_Open: Exit Sub
-- H. Frank Situmorang
"Dale Fye" wrote:
[Quoted Text] > Frank, > > You could add a table to your database that contains fields (FormName, > Language, CtrlName, CtrlProperty("Caption", "ControlTipText"), CtrlValue). > Then when the user changes the language they want to use, you could run some > code that loops through each of the forms (opening each form in design view, > hidden), gets the list of control names, properties, and values, for that > form, and updates the control properties. Then save and close the form. > This is untested, but It you should get the idea. > > Public Sub LanguageControls() > > Dim frm As Form, intForm As Integer > Dim ctrl As Control > Dim strSQL As String, rs As DAO.Recordset > > For intForm = 0 To CurrentProject.AllForms.Count - 1 > DoCmd.OpenForm CurrentProject.AllForms.Item(intForm).Name, acDesign > Set frm = Forms(0) > > strSQL = "SELECT * FROM tbl_LanguageConversion " _ > & "WHERE [FormName] = '" & frm.Name & "' " _ > & " AND [Language] = 'French'" > Set rs = CurrentDb.OpenRecordset(strSQL, , dbFailOnError) > While Not rs.EOF > set ctrl = frm.Controls(rs("CtrlName")) > ctrl.Properties(rs("CtrlProperty")) = rs("CtrlValue") > rs.MoveNext > Wend > rs.Close > Set rs = Nothing > > DoCmd.Close acForm, frm.Name, acSaveYes > Next > > End Sub > > One issue with using this for captions is that if the new caption is longer > than the old, and the label width is not wide enough, then you could cutoff > some text. you might want to consider adding a line like: > > if ctrl.controltype = acLabel then ctrl.sizetofit > > -- > HTH > Dale > > email address is invalid > Please reply to newsgroup only. > > > > "Frank Situmorang" wrote: > > > Hello, > > > > My Switchboard menu items takes the text from menutiems table. > > > > Since I want to make the menu items according to the language of the > > country. I want to insert the menu text in local as beside the the English > > column. My question is how can we say in the menu text item of the form ithat > > it will take the text from the local column? > > > > The Ooher alternative is to replace the English with the local language > > text, but it is not practical. > > > > Thanks for any idea provided. > > > > > > -- > > H. Frank Situmorang
|
|
Frank,
It sounds like your table structure contains the following fields:
Language FormLabel label1Caption label2Caption label3Caption
This is clunky (looks like a spreadsheet, and requires an extra column in your table structure for each label. I strongly recommend you go with a structure similar to what I provided (FormName, Language, CtrlName, CtrlProperty, CtrlValue). The advantage of this is that you can determine which property to change (caption, tooltiptext, or something else.
You could use a separate table for each form, but having a single table makes more sense. You could create and populate this table with a normalizing query that looks something like:
SELECT "bukuangkby" as [FormName], [Language], "Form" as [CtrlName], "Caption" as [CtrlProperty], [Column1] as CtrlValue FROM [bukuangkby_label] UNION ALL SELECT "bukuangkby" as [FormName], [Language], "NamaAnggota_label" as [CtrlName], "Caption" as [CtrlProperty], [Column2] as CtrlValue FROM [bukuangkby_label] UNION ALL SELECT "bukuangkby" as [FormName], [Language], "nextlabel" as [CtrlName], "Caption" as [CtrlProperty], [Column3] as CtrlValue FROM [bukuangkby_label]
Once you have this query working, you can save it and make a make table query to actually create your tbl_ControlProperties. Then do this for each of the other form tables, and append them to your tbl_ControlProperties. Finally, you go into that form, and add rows for the controls that you want to give tooltiptext property.
The alternative is to create a table, similar to the one you have now that is [bukuangkby_tooltips], where you have a language field, and a field for each of the controls that has a tool tip. Then you just replicate the code you have now, and instead of setting the Caption property, you set the tooltiptext property.
I prefer my method, because it does it all in a single pass, contains a single table (rather than one or two for each form), and has a table structure that is easy to understand. Anyone looking at your tables a year from now might have difficulty understanding what you are doing, but my structure is much easier to decipher.
-- HTH Dale
email address is invalid Please reply to newsgroup only.
"Frank Situmorang" wrote:
[Quoted Text] > Thanks Dale for your explanantion. > > My apporoach is creating a table for the individual form and for each source > control label table I have them in many languages. I have tested it and it > works. But this is for caption of the constrol source's label. I forget that > for some source control propery I made a messgae on the control tip text > property. > > My question is how should I make again for the control tips text a table? > and have the VBA as below? Can it work if I make the VBA: > Me.Form.Caption = .Fields(1) > Me.NamaAnggota_label.Control Tips Text = .Fields(2) > > Something like that? > > Dim db As DAO.Database > Dim rst As DAO.Recordset > Dim s As String > > On Error GoTo Err_Form_Open > > Set db = DBEngine(0)(0) > > s = Nz(DFirst("Language", "tblDefaults"), "English") > > s = "SELECT * FROM [bukuangkby_label] WHERE Language = '" & _ > s & "';" > > ' Debug.Print s ' for testing only > > Set rst = db.OpenRecordset(s, dbOpenForwardOnly) > > With rst > > If Not .EOF Then > > Me.Form.Caption = .Fields(1) > Me.NamaAnggota_label.Caption = .Fields(2) > ) > End If > .Close > End With > > Set rst = Nothing > Set db = Nothing > > Exit_Form_Open: > Exit Sub > > > -- > H. Frank Situmorang > > > "Dale Fye" wrote: > > > Frank, > > > > You could add a table to your database that contains fields (FormName, > > Language, CtrlName, CtrlProperty("Caption", "ControlTipText"), CtrlValue). > > Then when the user changes the language they want to use, you could run some > > code that loops through each of the forms (opening each form in design view, > > hidden), gets the list of control names, properties, and values, for that > > form, and updates the control properties. Then save and close the form. > > This is untested, but It you should get the idea. > > > > Public Sub LanguageControls() > > > > Dim frm As Form, intForm As Integer > > Dim ctrl As Control > > Dim strSQL As String, rs As DAO.Recordset > > > > For intForm = 0 To CurrentProject.AllForms.Count - 1 > > DoCmd.OpenForm CurrentProject.AllForms.Item(intForm).Name, acDesign > > Set frm = Forms(0) > > > > strSQL = "SELECT * FROM tbl_LanguageConversion " _ > > & "WHERE [FormName] = '" & frm.Name & "' " _ > > & " AND [Language] = 'French'" > > Set rs = CurrentDb.OpenRecordset(strSQL, , dbFailOnError) > > While Not rs.EOF > > set ctrl = frm.Controls(rs("CtrlName")) > > ctrl.Properties(rs("CtrlProperty")) = rs("CtrlValue") > > rs.MoveNext > > Wend > > rs.Close > > Set rs = Nothing > > > > DoCmd.Close acForm, frm.Name, acSaveYes > > Next > > > > End Sub > > > > One issue with using this for captions is that if the new caption is longer > > than the old, and the label width is not wide enough, then you could cutoff > > some text. you might want to consider adding a line like: > > > > if ctrl.controltype = acLabel then ctrl.sizetofit > > > > -- > > HTH > > Dale > > > > email address is invalid > > Please reply to newsgroup only. > > > > > > > > "Frank Situmorang" wrote: > > > > > Hello, > > > > > > My Switchboard menu items takes the text from menutiems table. > > > > > > Since I want to make the menu items according to the language of the > > > country. I want to insert the menu text in local as beside the the English > > > column. My question is how can we say in the menu text item of the form ithat > > > it will take the text from the local column? > > > > > > The Ooher alternative is to replace the English with the local language > > > text, but it is not practical. > > > > > > Thanks for any idea provided. > > > > > > > > > -- > > > H. Frank Situmorang
|
|
On Wed, 3 Dec 2008 05:27:01 -0800, Dale Fye <dale.fye[ at ]nospam.com> wrote:
[Quoted Text] >I prefer my method, because it does it all in a single pass, contains a >single table (rather than one or two for each form), and has a table >structure that is easy to understand. Anyone looking at your tables a year >from now might have difficulty understanding what you are doing, but my >structure is much easier to decipher.
Dale, I had originally helped Frank. I agree that your solution is by far the best way to handle the problem. It is a real expert solution. It is definitely a keeper for me.
I believe this is the table you suggested yesterday, except I changed the name:
CREATE TABLE FormLabels ( FormName TEXT(50) NOT NULL, Language TEXT(50) NOT NULL, CtrlName TEXT(50) NOT NULL, CtrlProperty TEXT(50) NOT NULL CHECK (In ('Caption','ControlTipText')), CtrlValue TEXT(50), PRIMARY KEY (FormName, Language, CtrlName, CtrlProperty) );
This is your code as tested. It works fine for me. Note that it watches the recordset for a control named Form_Caption and treats it as the form's caption, not as a control.
Public Sub LanguageControls()
Dim frm As Form, intForm As Integer Dim ctrl As Control Dim strSQL As String, rs As DAO.Recordset For intForm = 0 To CurrentProject.AllForms.Count - 1 DoCmd.OpenForm CurrentProject.AllForms.Item(intForm).Name, acDesign Set frm = Forms(0) strSQL = "SELECT * FROM FormLabels " _ & "WHERE [FormName] = '" & frm.Name & "' " _ & " AND [Language] = 'English'" 'Debug.Print strSQL 'for testing only Set rs = CurrentDb.OpenRecordset(strSQL, , dbFailOnError) While Not rs.EOF If rs("CtrlName") = "Form_Caption" Then frm.Caption = rs("CtrlValue") Else With frm.Controls(rs("CtrlName")) If .ControlType = acLabel Then .SizeToFit .Properties(rs("CtrlProperty")) = rs("CtrlValue") End With End If rs.MoveNext Wend rs.Close Set rs = Nothing DoCmd.Close acForm, frm.Name, acSaveYes Next End Sub
|
|
Michael,
Thanks for fleshing this out, and testing it. My response was just air code, and I've never actually had to implement a foreign language version (most of my work has been for the US Govt).
I hadn't really thought about the Forms caption until I responded this morning, so I didn't address that in my code. I would probably do two things differently: 1. I would select the Splash screen first, and after saving it, I would reopen it with a message indicating the database is being reconfigured for the specific language of interest. 2. OpenForm method, I would modify that line to open it hidden, so the user doesn't see the work that is going on.
-- Dale
email address is invalid Please reply to newsgroup only.
"Michael Gramelspacher" wrote:
[Quoted Text] > On Wed, 3 Dec 2008 05:27:01 -0800, Dale Fye <dale.fye[ at ]nospam.com> wrote: > > >I prefer my method, because it does it all in a single pass, contains a > >single table (rather than one or two for each form), and has a table > >structure that is easy to understand. Anyone looking at your tables a year > >from now might have difficulty understanding what you are doing, but my > >structure is much easier to decipher. > > Dale, I had originally helped Frank. I agree that your solution is by far the best way to handle > the problem. It is a real expert solution. It is definitely a keeper for me. > > I believe this is the table you suggested yesterday, except I changed the name: > > CREATE TABLE FormLabels ( > FormName TEXT(50) NOT NULL, > Language TEXT(50) NOT NULL, > CtrlName TEXT(50) NOT NULL, > CtrlProperty TEXT(50) NOT NULL > CHECK (In ('Caption','ControlTipText')), > CtrlValue TEXT(50), > PRIMARY KEY (FormName, Language, > CtrlName, CtrlProperty) > ); > > This is your code as tested. It works fine for me. > Note that it watches the recordset for a control named > Form_Caption and treats it as the form's caption, not as a > control. > > Public Sub LanguageControls() > > Dim frm As Form, intForm As Integer > Dim ctrl As Control > Dim strSQL As String, rs As DAO.Recordset > > For intForm = 0 To CurrentProject.AllForms.Count - 1 > DoCmd.OpenForm CurrentProject.AllForms.Item(intForm).Name, acDesign > Set frm = Forms(0) > > strSQL = "SELECT * FROM FormLabels " _ > & "WHERE [FormName] = '" & frm.Name & "' " _ > & " AND [Language] = 'English'" > > 'Debug.Print strSQL 'for testing only > > Set rs = CurrentDb.OpenRecordset(strSQL, , dbFailOnError) > While Not rs.EOF > > If rs("CtrlName") = "Form_Caption" Then > frm.Caption = rs("CtrlValue") > Else > With frm.Controls(rs("CtrlName")) > If .ControlType = acLabel Then .SizeToFit > .Properties(rs("CtrlProperty")) = rs("CtrlValue") > End With > End If > > rs.MoveNext > Wend > rs.Close > Set rs = Nothing > > DoCmd.Close acForm, frm.Name, acSaveYes > Next > > End Sub >
|
|
Mike:
Thanks for your idea, I will try to understand all of this. The one that you suggested has worked for me, but now Dale's suggestion is all in a simple pass and will be better.
As you know me it is faster for me to undestand if it is learning by doing, so if you don't mind, could you please send me Dale's suggestion that you tested and it works?
Thanks and God bless,
-- H. Frank Situmorang
"Michael Gramelspacher" wrote:
[Quoted Text] > On Wed, 3 Dec 2008 05:27:01 -0800, Dale Fye <dale.fye[ at ]nospam.com> wrote: > > >I prefer my method, because it does it all in a single pass, contains a > >single table (rather than one or two for each form), and has a table > >structure that is easy to understand. Anyone looking at your tables a year > >from now might have difficulty understanding what you are doing, but my > >structure is much easier to decipher. > > Dale, I had originally helped Frank. I agree that your solution is by far the best way to handle > the problem. It is a real expert solution. It is definitely a keeper for me. > > I believe this is the table you suggested yesterday, except I changed the name: > > CREATE TABLE FormLabels ( > FormName TEXT(50) NOT NULL, > Language TEXT(50) NOT NULL, > CtrlName TEXT(50) NOT NULL, > CtrlProperty TEXT(50) NOT NULL > CHECK (In ('Caption','ControlTipText')), > CtrlValue TEXT(50), > PRIMARY KEY (FormName, Language, > CtrlName, CtrlProperty) > ); > > This is your code as tested. It works fine for me. > Note that it watches the recordset for a control named > Form_Caption and treats it as the form's caption, not as a > control. > > Public Sub LanguageControls() > > Dim frm As Form, intForm As Integer > Dim ctrl As Control > Dim strSQL As String, rs As DAO.Recordset > > For intForm = 0 To CurrentProject.AllForms.Count - 1 > DoCmd.OpenForm CurrentProject.AllForms.Item(intForm).Name, acDesign > Set frm = Forms(0) > > strSQL = "SELECT * FROM FormLabels " _ > & "WHERE [FormName] = '" & frm.Name & "' " _ > & " AND [Language] = 'English'" > > 'Debug.Print strSQL 'for testing only > > Set rs = CurrentDb.OpenRecordset(strSQL, , dbFailOnError) > While Not rs.EOF > > If rs("CtrlName") = "Form_Caption" Then > frm.Caption = rs("CtrlValue") > Else > With frm.Controls(rs("CtrlName")) > If .ControlType = acLabel Then .SizeToFit > .Properties(rs("CtrlProperty")) = rs("CtrlValue") > End With > End If > > rs.MoveNext > Wend > rs.Close > Set rs = Nothing > > DoCmd.Close acForm, frm.Name, acSaveYes > Next > > End Sub >
|
|
Mike:
Further to my previous email, I have tried to understand the table and the VBA. I can make the table's fields with their primary key, but I do not know where is the CHECK (In ('Caption','ControlTipText'). Is it ('Caption','ControlTipText') to be typed in lookup tab of the field property?.
The other thing is the VBA Public Sub LanguageControls() a module? not part of the form VBA?
Thanks for your advice -- H. Frank Situmorang
"Michael Gramelspacher" wrote:
[Quoted Text] > On Wed, 3 Dec 2008 05:27:01 -0800, Dale Fye <dale.fye[ at ]nospam.com> wrote: > > >I prefer my method, because it does it all in a single pass, contains a > >single table (rather than one or two for each form), and has a table > >structure that is easy to understand. Anyone looking at your tables a year > >from now might have difficulty understanding what you are doing, but my > >structure is much easier to decipher. > > Dale, I had originally helped Frank. I agree that your solution is by far the best way to handle > the problem. It is a real expert solution. It is definitely a keeper for me. > > I believe this is the table you suggested yesterday, except I changed the name: > > CREATE TABLE FormLabels ( > FormName TEXT(50) NOT NULL, > Language TEXT(50) NOT NULL, > CtrlName TEXT(50) NOT NULL, > CtrlProperty TEXT(50) NOT NULL > CHECK (In ('Caption','ControlTipText')), > CtrlValue TEXT(50), > PRIMARY KEY (FormName, Language, > CtrlName, CtrlProperty) > ); > > This is your code as tested. It works fine for me. > Note that it watches the recordset for a control named > Form_Caption and treats it as the form's caption, not as a > control. > > Public Sub LanguageControls() > > Dim frm As Form, intForm As Integer > Dim ctrl As Control > Dim strSQL As String, rs As DAO.Recordset > > For intForm = 0 To CurrentProject.AllForms.Count - 1 > DoCmd.OpenForm CurrentProject.AllForms.Item(intForm).Name, acDesign > Set frm = Forms(0) > > strSQL = "SELECT * FROM FormLabels " _ > & "WHERE [FormName] = '" & frm.Name & "' " _ > & " AND [Language] = 'English'" > > 'Debug.Print strSQL 'for testing only > > Set rs = CurrentDb.OpenRecordset(strSQL, , dbFailOnError) > While Not rs.EOF > > If rs("CtrlName") = "Form_Caption" Then > frm.Caption = rs("CtrlValue") > Else > With frm.Controls(rs("CtrlName")) > If .ControlType = acLabel Then .SizeToFit > .Properties(rs("CtrlProperty")) = rs("CtrlValue") > End With > End If > > rs.MoveNext > Wend > rs.Close > Set rs = Nothing > > DoCmd.Close acForm, frm.Name, acSaveYes > Next > > End Sub >
|
|
On Wed, 3 Dec 2008 20:46:02 -0800, Frank Situmorang <hfsitumo2001[ at ]yahoo.com> wrote:
[Quoted Text] >Mike: > >Further to my previous email, I have tried to understand the table and the >VBA. I can make the table's fields with their primary key, but I do not know >where is the CHECK (In ('Caption','ControlTipText'). Is it >('Caption','ControlTipText') to be typed in lookup tab of the field property?. > >The other thing is the VBA Public Sub LanguageControls() a module? not part >of the form VBA? > >Thanks for your advice
Public Sub LanguageControls() should go in a module. One thing to keep in mind is that this code opens forms in Design View. I think this can only be done in a .mdb file, not in a .mde file.
The In("Caption", "ControlTipText") is a Validation Rule on the column CtrlProperty.
|
|
Thanks very much Mike. I will try to understand it thoroughly. I think I decided to use Dale's suggestion as it is more traceable and more comprehensive.
My knowledge is increased litte by little, so I appreciate if you could also explain how can it be the 4 primary keys, but it can duplicate, normally PK can not duplicate data. Also in the design view of the table we do not even see tthe field property that says allow duplicate or not. Could you tell me how do you desingn it that way. Before, I have seen the bulit in access main swithchboard items used this kind of approac of table, but I still can not understand how the primary key could duplicate data in it.
Thanks very much.
Frank -- H. Frank Situmorang
"Michael Gramelspacher" wrote:
[Quoted Text] > On Wed, 3 Dec 2008 20:46:02 -0800, Frank Situmorang <hfsitumo2001[ at ]yahoo.com> wrote: > > >Mike: > > > >Further to my previous email, I have tried to understand the table and the > >VBA. I can make the table's fields with their primary key, but I do not know > >where is the CHECK (In ('Caption','ControlTipText'). Is it > >('Caption','ControlTipText') to be typed in lookup tab of the field property?. > > > >The other thing is the VBA Public Sub LanguageControls() a module? not part > >of the form VBA? > > > >Thanks for your advice > > Public Sub LanguageControls() should go in a module. One thing to keep in mind is that this code > opens forms in Design View. I think this can only be done in a .mdb file, not in a .mde file. > > The In("Caption", "ControlTipText") is a Validation Rule on the column CtrlProperty. >
|
|
On Thu, 4 Dec 2008 07:19:07 -0800, Frank Situmorang <hfsitumo2001[ at ]yahoo.com> wrote:
[Quoted Text] >Thanks very much Mike. I will try to understand it thoroughly. I think I >decided to use Dale's suggestion as it is more traceable and more >comprehensive. > >My knowledge is increased litte by little, so I appreciate if you could also >explain how can it be the 4 primary keys, but it can duplicate, normally PK >can not duplicate data. Also in the design view of the table we do not even >see tthe field property that says allow duplicate or not. Could you tell me >how do you desingn it that way. Before, I have seen the bulit in access main >swithchboard items used this kind of approac of table, but I still can not >understand how the primary key could duplicate data in it. > >Thanks very much. > >Frank
You could select New Query, add no tables, and switch Query Design View to SQL and copy this and paste it into the SQL window. Save it and run it. Your table is created.
CREATE TABLE FormLabels ( FormName TEXT(50) NOT NULL, Language TEXT(50) NOT NULL, CtrlName TEXT(50) NOT NULL, CtrlProperty TEXT(50) NOT NULL, CtrlValue TEXT(100), PRIMARY KEY (FormName, Language, CtrlName, CtrlProperty) );
Now you still need to open the table in design view and add the Validation Rule for the column CtrlProperty.
Is your question that you do not understand the concept of a multiple-column primary key? Or maybe it is that you do not know how to do it in table design view? Just select the four fields and press the Primary Key Icon on the Toolbar.
A primary key cannot have duplicate data. There cannot be two rows where columns FormName, Language,CtrlName and CtrlProperty have the same data. That would violate the primary key and the database would reject the duplicate row.
I have a feeling that I am still not answering your question.
|
|
Thanks Mike, You have taught me how to make table starting from SQL view. I did itwith the conventinal way, adding row and then I press ctrl then the icon key, then the 4 colums become primary key, but when I simulated it by filling the data it was rejected because my concept of multiple primary key is still wrong. then when I read your posting I rethink it and should view the 4 as 1 primary key when filling the data, then I understand now.
So thank you very much, and I still see that clicking the default button is sill used to choose the languange to be used, right?. Yes, after clicking the default to choose the language and churchID, then I wll make it .MDE format before I send the software to the user.
One issue maybe when I fill in the Korean, or Japanese language which are not Latin alphabet. could it be working?. Anyway let me do it step by step. After langguage issue, maybe the next which I think maybe the last is creating the menu for import/exporting as the way to consolidate the data in the Regions, Union dan Division's levels.
Thanks & Regards
-- H. Frank Situmorang
"Michael Gramelspacher" wrote:
[Quoted Text] > On Thu, 4 Dec 2008 07:19:07 -0800, Frank Situmorang <hfsitumo2001[ at ]yahoo.com> wrote: > > >Thanks very much Mike. I will try to understand it thoroughly. I think I > >decided to use Dale's suggestion as it is more traceable and more > >comprehensive. > > > >My knowledge is increased litte by little, so I appreciate if you could also > >explain how can it be the 4 primary keys, but it can duplicate, normally PK > >can not duplicate data. Also in the design view of the table we do not even > >see tthe field property that says allow duplicate or not. Could you tell me > >how do you desingn it that way. Before, I have seen the bulit in access main > >swithchboard items used this kind of approac of table, but I still can not > >understand how the primary key could duplicate data in it. > > > >Thanks very much. > > > >Frank > > You could select New Query, add no tables, and switch Query Design View to > SQL and copy this and paste it into the SQL window. Save it and run it. Your table is created. > > CREATE TABLE FormLabels ( > FormName TEXT(50) NOT NULL, > Language TEXT(50) NOT NULL, > CtrlName TEXT(50) NOT NULL, > CtrlProperty TEXT(50) NOT NULL, > CtrlValue TEXT(100), > PRIMARY KEY (FormName, Language, > CtrlName, CtrlProperty) > ); > > Now you still need to open the table in design view and add the Validation Rule for the column > CtrlProperty. > > Is your question that you do not understand the concept of a multiple-column primary key? Or maybe > it is that you do not know how to do it in table design view? Just select the four fields and press > the Primary Key Icon on the Toolbar. > > A primary key cannot have duplicate data. There cannot be two rows where columns FormName, > Language,CtrlName and CtrlProperty have the same data. That would violate the primary key and the > database would reject the duplicate row. > > I have a feeling that I am still not answering your question. >
|
|
Mike:
I forgot to say that I plan to make foreign language for reports too. I appreciate it if you could inform me what to be modified in the module and Get forms query also should incluce the reports.
Thanks and Regards
-- H. Frank Situmorang
"Michael Gramelspacher" wrote:
[Quoted Text] > On Thu, 4 Dec 2008 07:19:07 -0800, Frank Situmorang <hfsitumo2001[ at ]yahoo.com> wrote: > > >Thanks very much Mike. I will try to understand it thoroughly. I think I > >decided to use Dale's suggestion as it is more traceable and more > >comprehensive. > > > >My knowledge is increased litte by little, so I appreciate if you could also > >explain how can it be the 4 primary keys, but it can duplicate, normally PK > >can not duplicate data. Also in the design view of the table we do not even > >see tthe field property that says allow duplicate or not. Could you tell me > >how do you desingn it that way. Before, I have seen the bulit in access main > >swithchboard items used this kind of approac of table, but I still can not > >understand how the primary key could duplicate data in it. > > > >Thanks very much. > > > >Frank > > You could select New Query, add no tables, and switch Query Design View to > SQL and copy this and paste it into the SQL window. Save it and run it. Your table is created. > > CREATE TABLE FormLabels ( > FormName TEXT(50) NOT NULL, > Language TEXT(50) NOT NULL, > CtrlName TEXT(50) NOT NULL, > CtrlProperty TEXT(50) NOT NULL, > CtrlValue TEXT(100), > PRIMARY KEY (FormName, Language, > CtrlName, CtrlProperty) > ); > > Now you still need to open the table in design view and add the Validation Rule for the column > CtrlProperty. > > Is your question that you do not understand the concept of a multiple-column primary key? Or maybe > it is that you do not know how to do it in table design view? Just select the four fields and press > the Primary Key Icon on the Toolbar. > > A primary key cannot have duplicate data. There cannot be two rows where columns FormName, > Language,CtrlName and CtrlProperty have the same data. That would violate the primary key and the > database would reject the duplicate row. > > I have a feeling that I am still not answering your question. >
|
|
Mike:
The subroutine FillFormLabels is called in the open event, but I do not know when the sub: LanguageControls is called.
I need to know it whether I make the other sub LanguageControls or I just add like you said.
Thanks for your advice
-- H. Frank Situmorang
"Michael Gramelspacher" wrote:
[Quoted Text] > On Thu, 4 Dec 2008 20:21:01 -0800, Frank Situmorang <hfsitumo2001[ at ]yahoo.com> wrote: > > >Mike: > > > >I forgot to say that I plan to make foreign language for reports too. I > >appreciate it if you could inform me what to be modified in the module and > >Get forms query also should incluce the reports. > > > >Thanks and Regards > > For reports try creating a new subprogram using Dale's code, but change CurrentProjects.Allforms to > CurrentProject.AllReports. There are a few other changes needed, but basically it is the same as > for forms. Instead of Forms(0) it will be Reports(0). Instead of Dim frm As Form use Dim rpt As > Report. Just work with it and do some testing. >
|
|
Mike:
Sorry I am a slow learner, you said there will be no code in the open even, but I found it this we still have code. Isn't it what you mean? this below: Private Sub Report_Open(Cancel As Integer)
On Error GoTo Err_Report_Open
Call FillReportLabels(Me.Name)
Exit_Report_Open: Exit Sub
Err_Report_Open: Select Case Err.Number Case Else Call ShowError(Err.Number, Err.Description, "Report_Worldwide Membership Report." _ & "Report_Open") Resume Exit_Report_Open End Select End Sub
Sould we comment this out, if we use Dale's menthod?, but in the sample you sent me is already Dales' menthod, why is this still exist?
Thanks in advance -- H. Frank Situmorang
"Michael Gramelspacher" wrote:
[Quoted Text] > On Sat, 6 Dec 2008 20:21:00 -0800, Frank Situmorang <hfsitumo2001[ at ]yahoo.com> wrote: > > >Mike: > > > >The subroutine FillFormLabels is called in the open event, but I do not know > >when the sub: LanguageControls is called. > > > >I need to know it whether I make the other sub LanguageControls or I just > >add like you said. > > > >Thanks for your advice > > You said you intended to use Dale's code to change the language of all labels prior to making the > ..mde. This means you will have a separate .mde for each language. If you use Dale's method, then > there is no code needed in the Open Event of forms and reports. You run Dale's subprogram one time > prior to making the .mde for each language You also need to run a subprogram to change the labels > of reports. You need to create yourself this subprogram to change report labels, but it is almost > identical to Dale's subprogam for forms. This has already been explained. I hope you understand > now. >
|
|
|