There is probably a pretty basic answer to this question, but I'm pulling my hair out trying to resolve my issue. I'm using Access 2007.
My query is shown below:
SELECT Pricing.*
FROM OrderReceipt_be
INNER JOIN Pricing ON CInt(OrderReceipt_be.[Pricing Table Option Code]) = Pricing.ID
WHERE OrderReceipt_be.[PO_Number] = PONumber();
For whatever reason, the [PO_Number] field is stored as text against my key which is a long int. This is why I'm trying to convert it to an integer.
However, when I run my query I get the error
"Compile error. in query expression CInt(OrderReceipt_be.[Pricing
Table Option Code]) = Pricing.ID".
I've done some basic research and it seems like the most common issue is that I'm missing a reference library. Howver, having gone through the entire list, I don't see any references that are tagged as "Missing" so it must be something else. I've also tried disabling and re-enabling all enabled reference libraries to see if that helps, but so far nothing.
Any thoughts?
If you can have codes of Null, try:
SELECT Pricing.*
FROM OrderReceipt_be
INNER JOIN Pricing ON Val(Nz(OrderReceipt_be.[Pricing Table Option Code])) = Pricing.ID
WHERE OrderReceipt_be.[PO_Number] = PONumber();
or try the reverse conversion:
SELECT Pricing.*
FROM OrderReceipt_be
INNER JOIN Pricing ON OrderReceipt_be.[Pricing Table Option Code] = CStr(Pricing.ID)
WHERE OrderReceipt_be.[PO_Number] = PONumber();
Related
The following query (qryCurLotNewProducts) produces a data set that I want process further with another query (qryBNP_CFRecordset):
//qryCurLotNewProducts
SELECT tblNewProducts.*
FROM tblNewProducts INNER JOIN tblCurLot ON (tblCurLot.CatalogNum = tblNewProducts.CatalogNum) AND
(tblNewProducts.LotNum = tblCurLot.CurLot);
When I run this second query to list only the "CF" products found in the first query, I get the `Data type mismatch in criteria expression' error.
//qryBNP_CFRecordset
SELECT qryCurLotNewProducts.*, tblABCategory.UNSPSC, tblAmount.ProductSize
FROM tblAmount RIGHT JOIN (tblABCategory RIGHT JOIN qryCurLotNewProducts ON tblABCategory.ABCategory = qryCurLotNewProducts.ABCategory) ON tblAmount.Amount = qryCurLotNewProducts.Amount
WHERE (((qryCurLotNewProducts.CatalogNum) Like "A700-###CF") AND ((qryCurLotNewProducts.DateEntered) Between #1/1/2000# And #3/1/2020#))
ORDER BY qryCurLotNewProducts.CatalogNum, Abs(qryCurLotNewProducts.LotNum);
If I remove the CF from the search string (so "A700-###"), the query correctly outputs a list containing all items that contain that pattern:
If I use strings like "A700-####F" or "A700-###ZZ" or other combinations like that, I don't get an error but rather an empty results set.
Notably, "A700-001CF", "A700-002CF", etc all create the data type error. It seems there is something about the CF key combination that is causing trouble.
Has anybody else ever seen this issue? Do I need to use some kind of delimiter to tell SQL to not view CF as some kind of special switch?
Abs(qryCurLotNewProducts.LotNum) wont work with the values for Products ending in CF. Your LotNum-Column has a text-type.
Edit: Your LotNum-Column has a text-type as you can see in your first screenshot.
I'm trying to run a query on access using two live CSVs which has a common field with different data types(numbers and short text). I've discovered that you can join different data types using 'CStr'. I've added the 'CStr' to my code on the sql view. Please find the see the code below.
This gives me the output i want on access and i can now see the output when i click on 'datasheet view'. However, when i try to export the data (i'm actually trying create a export specification so that i can export a csv using macro) as a csv i'm getting a 'type mismatch in expression' error message.
Here's my code:
SELECT Sixthform_Reg_Year_Groups.Forename,
Sixthform_Reg_Year_Groups.Surname,
Sixthform_Reg_Year_Groups.Reg, Students.objectGUID
FROM Sixthform_Reg_Year_Groups INNER JOIN
Students
ON CStr(Sixthform_Reg_Year_Groups.Person_id) = Students.employeeID
WHERE (((Sixthform_Reg_Year_Groups.Reg)="12E"));`
I've also tried adding 'CStr' on both sides. as below, but experiencing the same issue.
FROM Sixthform_Reg_Year_Groups INNER JOIN
Students
ON CStr(Sixthform_Reg_Year_Groups.Person_id) = CStr (Students.employeeID)
WHERE (((Sixthform_Reg_Year_Groups.Reg) = "12E"));`
And of course, without 'CStr' i can't even view the output on 'datasheet view'. Every time when i click on datasheet view it's giving me the 'type mismatch in expression' error message.
Any help in resolving this would be much appreciated.
Thanks in advance.
Additinal info: the data types are EmpoyeeID is 'Short Text' and Person ID is 'Number'
Try the other way round:
ON Sixthform_Reg_Year_Groups.Person_id = Val(Students.employeeID)
and/or prevent Null errors:
ON CStr(Nz(Sixthform_Reg_Year_Groups.Person_id, 0)) = Nz(Students.employeeID)
OK guys, I've managed to resolve this issue, It turned out to be simple in the end. This is what i did.
Basically, I re imported the linked table. This time on the import window i clicked on 'advanced' and changed the data type to 'short text' on the 'person ID' column to match with the 'employeeID' data type. And then all problems solved. (I didn't know you could do this)
Thank you all for your replies. Going through your comments guided me to the right path.
Much appreciated.
I adapted my code from the instructions here.
open FSharp.Data.Sql
let [<Literal>] connection_str = "Server=localhost;Port=3306;SSL Mode=None;Uid=<UID>;Pwd=<PWD>;Database=<DB>"
type provider = SqlDataProvider<Common.DatabaseProviderTypes.MYSQL, connection_str>
let context = provider.GetDataContext()
context.Procedures.SpGetFrontContracts.Invoke(1)
Intellisense works until the period after SpGetFrontContracts. After that, nothing. Trying to compile, I get:
Error FS0039 The field, constructor or member 'Invoke' is not defined.
I am otherwise able to connect to the database and insert and query data, as long as I stick to tables and views.
SpGetFrontContracts is a valid stored procedure in my database (its actual name is sp_get_front_contracts, but the type provider seems to remove underscores). I can run it successfully using HeidiSQL. In case it's useful, here's the create code:
CREATE DEFINER=`<UID>`#`localhost` PROCEDURE `sp_get_front_contracts`(
IN `Group` INT
)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
SELECT p.DateTime, p.Contract, p.Volume, c.Name
FROM tbl_contract_price_data p
INNER JOIN tbl_contracts c on p.Contract = c.ID
WHERE c.`Group` = `Group`
ORDER BY p.DateTime
LIMIT 1000;
END
I tried creating a simpler sproc that was named 'test', took no parameters, and simply ran a select statement. It showed up in the type provider under Procedures, but again I could not call Invoke on it.
My best guess is that Invoke is being inherited from some namespace or assembly reference I don't have, so I'm currently looking through the SqlProvider source to try to figure out what it might be. I'm currently referencing:
FSharp.Core
FSharp.Data
FSharp.Data.SqlProvider
mscorlib
System
System.Core
System.Data
System.Numerics
System.ValueTyple
System.Xml.Linq
Thank you for any suggestions.
Edit: It looks like the action is in SqlDesignTime.fs in a function called generateSprocMethod that starts on line 346. I'll try to figure out what's going on in there.
Edit: After three days banging my head against this, I gave up and just used MySQL Connector/NET.
I'm not sure about your underlying data or structures, but I know these are two other (correct) ways to solve it:
WHERE c.`Group` = `Group` -- what you have.
-- possible corrections:
WHERE c.`Group` = p.`Group` -- did you mean this?
WHERE c.`Group` = "Group" -- or this?
I'm stuck on a problem with removing a record through MS Access frontend. On the dialog form I've put the button and in the onclick event I've created a sub with VBA command RunCommand acCmdDeleteRecord.
Execution seems to proceed, I receive warning about removing single record from database, and after I hit OK and refresh nothing happens. In fact removed record is still there.
Moreover, I've tried to remove it from the MS Access query (on which the form is based) and still no luck - again the confirmation window appears, and after clicking OK button and refresh the record persists in table.
I've successfully removed record directly from rdbms (Postgresql 9,4 ODBC connected to MS Access frontend by connection string and linking tables). No additional info in Postgresql logs. Seems like everything should work, but it doesn't. And no any error messages. Could you please give me any suggestions on this?
Here is the SQL query:
SELECT inventory.inventory_id, inventory.serial_number, inventory.registry_number,
inventory.year_of_manufacture, inventory.description,
inventory.assortment_id_assortment, inventory.personnel_id_personnel,
inventory.classification_id_classification, inventory.case_series,
inventory.case_id, inventory.comments, inventory.mac_address,
assortment.assortment_id, assortment.vendor, assortment.model,
assortment.type_id_dict_assortment_types, assortment.jim,
dict_assortment_types.type_id, dict_assortment_types.type_name,
personnel.personnel_id, personnel.first_name, personnel.last_name,
personnel.operational_id, personnel.seal_number,
personnel.military_grade, dict_classifications.classification_id,
dict_classifications.classification_abbr,
dict_classifications.classification_name, carrying_cases.description,
carrying_cases.location, inventory_comments.comment_id,
inventory_comments.comment, inventory_comments.inventory_id_inventory,
inventory.sdip_27, inventory.seal_number, inventory.seal_number,
inventory.description
FROM inventory_comments RIGHT JOIN (carrying_cases
RIGHT JOIN ((((inventory INNER JOIN assortment
ON inventory.assortment_id_assortment = assortment.assortment_id)
LEFT JOIN dict_assortment_types
ON assortment.type_id_dict_assortment_types = dict_assortment_types.type_id)
LEFT JOIN personnel ON inventory.personnel_id_personnel = personnel.personnel_id)
LEFT JOIN dict_classifications ON inventory.classification_id_classification
= dict_classifications.classification_id)
ON (carrying_cases.case_id = inventory.case_id)
AND (carrying_cases.case_series = inventory.case_series))
ON inventory_comments.inventory_id_inventory = inventory.inventory_id
ORDER BY inventory.inventory_id;
Thank You
Smok.
Just to close this question.
I found it most reliable to use delete queries with DoCmd.RunSql "DELETE * FROM table WHERE condition". This approach gives more controll over what happens and clear code (unless you hate SQL).
Thank you for all suggestions
Smok.
What's wrong with this statement?
SELECT aufk~aufnr
zmm_limit_co~vd zmm_limit_co~matkl_code
zmm_limit_matkl~sign
FROM aufk
JOIN zmm_limit_co ON zmm_limit_co~auart = aufk~auart
left JOIN zmm_limit_matkl
on zmm_limit_matkl~matkl = zmm_limit_matkl~matkl_code
INTO CORRESPONDING FIELDS OF table lt_input
WHERE aufk~aufnr = <lf_new_pos>-aufnr.
When I'm trying to execute program, ABAP gives me an error:
'The elements in the "SELECT LIST" list must be separated using commas.'
I suppose, that the error is somehow connected with JOINs, when I'm removing "left" from it - it's compiling just fine, but with it.
You are (probably inadvertently) mixing the old (now obsolete) and new syntax of the OpenSQL SELECT statement, triggering this rather less-than-helpful error message. Check the release-specific change notes for some details on the changes. However, in the example given, I believe that the second join condition is the problem: You're not joining the contents of zmm_limit_matkl with any of the other two tables, but with itself. That doesn't look right and might confuse the compiler.