Access VBA code for copying information from a combobox and pasting into a textbox on a continuous form - vba

Really need help with this, I have a continuous form with a combo box to choose data, each row has a different criteria and you can choose only certain items per row in the combo box drop down. (As an example I have four rows one is a cap, one is a bottle, one is a label and the last is oil to go in the bottle.)
What I need is when I have chosen something in the combo box drop down I want it to paste into a text box and stay there until another choice on the same row is made...... Currently I can make the information appear in the textbox but then when I move to another row and choose anothe item it over writes anything I have already chosen.
So an example would be I have chosen product 1, it has cap 1, bottle 1, label 1 and oil 1. In the drop down combo box I can choose only bottles to replace bottles caps to replace caps and so on. I want to choose bottle 2 in the combo box on the bottle line (Which changes all the combo boxes) I now want to save that choice in the text box on the bottle row only, then when I choose Label 2 on the label row even though it changes all the combo boxes I don't want it to overwrite the text box for the bottle row. (I'm assuming a criteria that will only change the row of the combo box you are clicking on or something like that)
hope this makes sense to every body (P.S. I don't know how to get a screen shot in here so have tried to explain to the best of my ability)
Many thanks
Justin

You have to bind the textbox to a field in the record.
As long as the textbox is unbound, it doesn't know about a record and will display the same for all records.

I'm making the assumption that you want to be able to map some product to 4 different types of caps, bottles, labels, and oil:
It seems that your problem is in your data table design, not in your comboboxes. You shouldn't need the text field at all. The problem is that your comboboxes are all based on the same table. When you select Bottle2 from one of them, it matches the rest of the comboboxes to that row. So all the others will get Label2, Cap2, etc. because they are in the same row of the table.
Make a products table call it tblProducts. The fields ID (autonumber), product_name, label_FK, cap_FK, Bottle_FK, and oil_FK should be in it. Those FK stand for Foreign key and should be a number type. The product name can be text.
Create the tblLabel, tblCap, etc. with an ID, and a description.
In your relationships you need to map the tblLable.ID to the tblProducts.Label_FK field. Do this for all 4 type. Then you can re-create the form based on the products table. Whatever the form gives you for the way to control the label_FK, cap_FK, etc. fields you can convert it to a combobox by right click -> change to...
Finally, you may need to update the number of columns of the comboboxes in order to see the description also.
EDIT: More lasting information -
Doing some solid research on data table design will pay huge dividends in design time. Starting with the Database Design Basics page from Microsoft will help as a decent 30 minute intro and should help clear some things up for you.

Related

Show a name instead of an id

I currently have these options set in a combo box:
This box will show the projectIDs that a current company has which is set with the criteria. I just want to show the name of the project as people will not know just by the id. If I remove the check box for the projectID it will just remove that field completly and not show anything. I have debugged what companyBox.Value is and it is indeed a number for a company and if taken this id and replaced it with the following query which is built from the picture and it returns the results I want. I just cant get the values to show in the combo box.
SELECT projects.projectName
FROM companys INNER JOIN projects ON companys.companyID = projects.companyID
WHERE (((companys.companyID)=7));
Gives me all the projectNames where the companyID is 7
And as seen below that same query just gives me blank spaces instead of the names:
Ok, if you have say a query, then as noted, then you can use a "join" to pull in the other table (based on that "projectID").
So, for a general report etc., then your approach of using the query you have is correct.
HOWEVER!!!
For a combo box? They have this feature and ability built in. In other words you do NOT in general need a join.
The combo box has two parts:
A sql query that "drives" or "fills" the combo box. This can (and will be) of course based on the Projects table.
VERY important:
Our combo box is to save, store, put, use the project ID into a column in our CURRENT form. That form of course is based on a differnt table (the forms current table). So, keep in mind the two concpets:
Combo box can be driven by any table to display data.
Combo box will/can use a column from that "other" table to SAVE into a current column on the current form.
Now of course the Project "id" is the VALUE we want, but we sure as don't want to display that "project id" value, since as you note, humans want the nice looking text.
First Rule:
ALWAYS, but ALWAYS make sure the FIRST column of the combo box "sql query" is the column we WANT to save into the current form, but ALSO the column we are going to HIDE AND NOT show to the user.
So, a combo box can with great ease HIDE the first column. You can hide other columns, but as a general rule a VERY HIGH number of my combo boxs will have two columns. So, you might need company "id", but would want to display company name as nice text to the user, but store/save/use the "id" of company for this purpose.
So, in your case? Change the order of your columns.
You want:
ProjectID, ProjectName, and you ALSO can continue to have a filter based on company.
So, once you get above setup, and you WILL NOT need a sql join. Remember, the combo box has it own "whole sql statement" based on table projects.
So, the combo box will:
Save/store/use the ProjectID when you select a project.
And it will display the project name, but behind the scenes it will use + save ProjectID.
So, just make sure that you set the length of the first column in the combo box to 0 (to hide that projectID from display).
Next, make sure you set WHICH column value from the query the combo box is to save.
That column will be the FIRST column, so you want to set that to 1
Your combo settings will look something like this:
In above, the CONTROL source is your CURRENT form and table.
So, I want to get a Hotel "ID" from the table hotels, but I am going to save the results of the combo box selection INTO a column called Hotel_ID
And note VERY careful - I set the bound column = 1 (that is the FIRST value from the query that drives the combo box.
Next up:
We want to hide the first column value, so you need this setting in format tab of the property sheet for the combo box:
NOTE VERY close in above. I set the FIRST column width = 0. this is HOW you hide the "ID" of hotels - I only want the user to see the nice hotel name. (or in your case Project name).
But, the 2nd column, I have a width for the Hotel name (or in your case project name).
So, make your first column in the query for the combo box the "id" of project id. Set the width of the first column = 0.
So, the query that drives the combo box? It is based on the ONE table, but you need to ensure that the "id" that you going to use is the first column, and simple hide it from display.
So, a combo box has a sql query that drives the combo box, and that query in most cases will NOT be the current table.
So, you have to set BOTH settings (the column the combo sql query will use - but to avoid confusing, then just adopt the habit of making the 1st column the "id" or value you want from that sql.
But, after setting above, you STILL have to set what column to shove/put that column into on the current form. (that setting is the control source).
In effect, a combo box is a kind of look-up into the other table, and it can display nice user friendly text columns, but still use + store the ID.
So, your query should look more like this:
SELECT ID, projectName
FROM projects
WHERE (((companys.companyID)=7));
I don't know if your first column of Projects table is "ID" (or is it ProjectID), but as you can see, the combo box ONLY needs to be based on the one table, and with our new rule - we always use the first column of the query the "id" value we want.
Now, of course the above is "hard coded" for company, and your original query that drives the combo box was fine - just that the order of the columns display was incorrect.

GridViewMultiComboBoxColumn: Allow User to Enter Data

I got a very straight forward Grid connected to a DataSet. I'm doing this in VISUAL BASIC. Using Telerik Winforms Q3 2013.
Every column is a text Column, 2 of them are Multi Column Combo Boxes, attached to a distinct dataset which just brings the possible information. And is only intended for reference.
I want to let the user be able to key into these columns any text they want regardless if it's on the list or not.
I looked at this post http://www.telerik.com/help/winforms/gridview-editors-howto-allow-end-users-to-add-items-to-dropdownlisteditor.html
But this example is just too confusing and most importantly, it saves to the ref/underlining ref dataset, which is not desirable.
How can I set up the comboboxes to allow users to enter any text they want.
Thanks
The Multi Column Combo Boxes are working with items, these items are gotten from the data source of the Multi Column Combo Box. So in order to allow freely typed text, the latter should be added to the data source.

How to perform multiple selections in a Qlikview Straight Table?

How would I go about making multiple selections in a QlikView straight table?
For example, how would I select the 1st and 5th rows at the same time?
There is a section about multiple selections in the QlikView 11 - Reference Manual :
14.5 Multiple Selection Within a Field
Multiple selections within a field (from one lisstrong textt box) can be made in a number of ways:
Position the cursor in the list box, then drag it over a number of field values while pressing the
mouse button.
Click the first field value to be selected, then CTRL-click each additional selection.
Click the top item to be selected, then SHIFT-click the bottom item to be selected. This way all the
items in between will be selected. However, if the sort mechanism is on, the first selection may cause
the order to change, which makes it difficult to make a correct second selection.
Confirm a text search (see below) by hitting the ENTER key. This will result in all matching field
values being selected. By keeping the CTRL key depressed while pressing ENTER the selections
from the text search will be added to previous selections.
To deselect a previously made additional selection, CTRL-click it.
If a multiple selection is made in one list box, and make a new selection from the available optional values
in another list box, some of the selected values in the first list box may get excluded. However, when the
selection in the second list box is canceled, the previous selections will, by default, be recovered.
A multiple selection can be interpreted in two different ways, either as a logical or or as a logical and.
Default is logical or, i.e. QlikView will find a solution that is associated to one or more of the selected field
values.
HTH
For straight tables, you can only select items next to each other. Ctrl-Select only works for listboxes

Continuous form with dependent combo boxes

I have a continuous form that has a dependent combo box on it. I have the dependent working individually for each row/record BUT the dependent combo box is blank unless it has focus then it shows the saved data so what I did was placed a text box over the data portion of the combo box and set its control source to the same field as the dependent combo box and required and it worked great BUT unlike a combo box which would show the name it shows the saved data which is a ID number so I guess my question is how can I show the name and not the data?
Thanks!
You'll need to clarify, but if the combobox is bound to a field of the form, and its RowSource displays two columns - say an ID and Name - then giving the first column a width of 0 will persuade it to display the Name, rather than the ID.
You will also need the Column Count to be 2 (or more) and the Bound Column to be 1 (the ID). Then set the Column Widths to 0cm;2cm (add more values if more than 2 columns).
Added
Remove this criteria from your cobmobox's Row Source:
[Forms]![frm_DelayMachineOutputSubform]![cboCategory]
It is not needed. The ActivityID (and the CategoryID) are obtained for each row in the form.
Remove these lines from the Current event as well:
Me.cboActivity.Requery
Me.txtActivity.Requery
again, they are not needed (and cause the flicker). Better yet, just delete this event-code.

Combo Box Column Count culls data?

Basically, I have a combo box that I'm using to select a record. That combo box then populates several textbox's that are found on my form based on the ID. See the two images:
.
I'd like the combo box to show the first two columns in my query, which consists of 16 fields. The Abbreviation and the Name, to be exact. However, I found that if I hid the fields in the query or if I limited the column count of the combo box so it only displays the two, it actually culled the data so that the textbox's would not find it (thus be blank).
My question is, how can I just show the first two columns of the combo box yet still use it's ID to reference all sixteen?
Query
SELECT Tradeshows.tradeShowAppreviation,
Tradeshows.tradeShowName, Tradeshows.tradeShowID,
Tradeshows.tradeShowWebsite, Tradeshows.tradeShowLocation,
Tradeshows.tradeShowDateStart, Tradeshows.tradeShowDateEnd,
Tradeshows.tradeShowBoothSize, Tradeshows.tradeShowShipDate,
Tradeshows.tradeShowAudience, Tradeshows.tradeShowFocus,
Tradeshows.tradeShowMailer, Tradeshows.tradeShowDoorDrop,
Tradeshows.tradeShowProductFocus, Tradeshows.tradeShowAttendees,
Tradeshows.tradeShowMembers, Tradeshows.tradeShowMemberships
FROM Tradeshows;
Do not change the column count, change the column widths.
Column width: 0cm;2cm;1cm;0cm
And so on.
it should not be difficult to only select the relevant columns. You could post the Row Source property of your combo.
It seems to me that you should be binding you table to the data source TradeShows and using the wizard to create a combobox that finds record.
You can do this by selecting the table Tradeshows and choosing either create form or form. You will now have a form with the RecordSource property set to TradeShows. Next, choose to add a combobox to the form, ensuring that you have selected the wizard (the magic wand button is highlighted). You will be given the option to "Find a record on my form based on the value I select in my combobox". You can choose this and step through the wizard. When you get to the step where you choose fields, make sure you choose the TradeShowID first, and then the name and / or abbreviation. If TradeShowID is the primary key, as it should be, the column will be automatically hidden in the next step, which will show the fields selected.
The result of these actions will be a combobox with the following properties:
Row Source : SELECT [Tradeshows].[tradeShowID], [Tradeshows].[tradeShowName],
[Tradeshows].[tradeShowAppreviation] FROM [Tradeshows];
Bound Column : 1
Column Count : 3
Column Widths : 0cm;2.54cm;2.54cm
You will also have [Embedded Macro] in the After Update event (2010 and possible 2007) or [Event Procedure] for earlier versions. The wizard code is pretty poor, but that is another days work.
If you still wish to do all the work of setting each control to the (possibly changing) column order, you can follow a similar lay out for the combo, setting counts and widths appropriately.