ERROR "Type mismatch in expression"

I am trying to add 3 new fields to my report. The 3 new fields are from a different Table. I am getting an error " Type mismatch in expression"

TaskID -AutoNumber
Status - Memo
OnTarget - Yes/No
Expected Completion Date - Date/Time
POC - Text
Description - Text

POC - AutoNumber
LastName - Text
FirstName - Text
EmailAddress -Text

In my report i would like to have the following infomation

TaskID / Status/ OnTarget/ Expected Completion Date/ POC /Description / LastName /FirstName /EmailAddress

SQL Statment: Query Builder
SELECT Employees.*, MainTable.*
FROM MainTable INNER JOIN Employees ON MainTable.POC = Employees.POC;


Post your answer or comment

comments powered by Disqus
Quick background, I've done SAS Programming for the past few years. I'm fairly new to access and becoming quickly frustrated with what I feel are limitations.

Now the issue...

I have two excel tables. Both are all numeric. I have imported both of these files in. When I try to join the two tables ON a field from each I get "Type Mismatch in Expression".

One of the files is reading in as pure text, though that is not the case. There are no non-numeric values anywhere on the spreadsheet. Can I force the field to read in as numeric?

I am new to Access 2010 and am trying to build a query of MI counties and survey which includes MI zip codes. In the end I need a Report by county of survey results (which includes the zip codes). I have a table with zipcodes, counties and cities and another table with the survey which contains zipcodes. When I try to build a query with the County from one table with the ZipCodes and other fields from the Survey table I get an error message.

The query contains an error "type mismatch in expression". I don't know how to fix it. Are the join types correct? Or what do I need to change? I thought that if I linked the zip code from the survey with the zip codes/counties from the Zipcode Table it would work.

Any ideas?

I was trying to bring down values from two different tables that have County(Numeric field) as a common field. But i am getting this error,
Run time error "3615", type mismatch in expression. I donno wat is the reason. Here is the snipet of my query,

SELECT dbo_hpr.ADDRESS, dbo_hpr.PROPNAME, Dbo_Bridges1.CITY, Dbo_Bridges1.ADDRESS
FROM Dbo_Bridges1 INNER JOIN dbo_hpr ON Dbo_Bridges1.[COUNTYCD] = dbo_hpr.[COUNTYCD]
WHERE (((dbo_hpr.ADDRESS) Like Nz(Forms!Prop_Bridges!comboaddr,"~") & "*"))

P.S: Here dbo_hpr - table1
Dbo_Bridges1 - table2
COUNTYCD is the Column name that exists in both the table. Can someone pls help me fixing it. Thanks in advance

Access 2007. I get a Type mismatch in expression error when I try to open a form. It is a split form based on a very simple table, not a query. The form worked fine all week but obviously I've done something recently to trigger this problem. Any help would be greatly appreciated. Thank you.

I'm using the following in a query but I keep getting Type Mismatch In Expression Error.

Regdate is a Date/Time Field in my Db.

Expr1: DateDiff("d",Date(),[RegDate])


I have a database which relies on importing data from .dbf files generated from a DOS system

The import has worked fine until today and I am now recieving a type mismatch in expression error. I have not made any changes to the database, and it was working the last time data was imported

I have manually checked the data types of all fields which showed up nothing, and rebuilt the query field by field, although I got the type mismatch error with the first field i entered into the query

Im completely stuck for ideas....

Any suggestions?

We recently switched our machines to an updated 2010 version of Windows and Access (formally had a 2003 version of Access). Now, when I try to open an old form, I receive the "Type mismatch in expression" error. All of the other forms (including a seemingly identical form) open without the error.

Any suggestions?

Hi, I am an access newbie. I've downloaded a dummy mdb from a forum.
Problems: an error pops out that " type mismatch in expression" when I use "qryDocumentListing“, ”qryLastest DocRevList“, and ”rptDocmentRegister“, can anybody help? thanks. Attached Files (88.0 KB, 6 views) Reply With Quote 09-22-2010, 10:47 AM #2 ConneXionLost Simulacrum Windows XP Access 2003 Join Date Jan 2010 Location Victoria, Canada Posts 291 Open the query [qryLatest DocRevList] in design view.

Delete the join:

Code: tblDocRevisionsLog.actionee = tblUsers.userID Make a join:

Code: tblDocRevisionsLog.actionee = tblUsers.firstname Cheers,

I am trying to write a query to join up a query with a table. My raw data includes a personnel code, and I can tell whether that employee is in Group A or B by the last digit of their code. (Odd = Group A, Even - Group B.)

I have that query calculating the personnel code as a value, and using the "RIGHT" function to create a new column with only the last digit in it.

I then have another table that tells you which number equated to which Group. (1 = Group A, 2 = Group B etc.)

So I'm trying to join these up in a second query to populate Group A or B into the result. If the last digit of their personnel code = 1, I want the query to return "Group A."

But I keep getting the message "Type Mismatch In Expression" when trying to join these together with an outer join. I have confirmed that the table values are numeric not text, and I know my query result is returning a numeric value not text. So why can't I join these up?

Will greatly appreciate any help!

i am trying to create a query that combines all my tables together into a new table. It wont let me run the query. It says TYPE MISMATCH IN EXPRESSION. What does that mean??

Hello all, I'm currently trying to make a very simple "[Quantity]*[Price]" expression, using Quantity from one table and Price from another, in a Query (I'm also not sure how to implement it in a existing form, but that's another story). Yet every time I click on the query to test it out, it pops up with the box "Type mismatch in expression".
Access' Help states that I am joining two different data type fields and it doesn't like that. The fields concerned are "Quantity" which is a Number datatype in tbl_Order, and "Price" which is a Currency datatype in tbl_Product.

Any solutions to this problem greatly appreciated. Any more info needed please ask, thanks.


can someone pls tell me why i get an Type mismatch in expression err with this code:

SELECT tblsifrant.Proizvajalec, tblsifrant.Tip, tblsifrant.DN, tblsifrant.Kosov
FROM tblsifrant, tblACAD
WHERE (((tblsifrant.Sifra)=[tblACAD.TIP]) AND ((tblsifrant.DN)=[tblACAD.DN]) AND ((tblACAD.KOSOV)>0));

If i remove one criteria to get this code then there are no err, but thats not what i want:

SELECT tblsifrant.Proizvajalec, tblsifrant.Tip, tblsifrant.DN, tblsifrant.Kosov
FROM tblsifrant, tblACAD
WHERE (((tblsifrant.Sifra)=[tblACAD.TIP]) AND ((tblACAD.KOSOV)>0));

I create this code in design view so all the names and tables are correct.

So does anyone have any ideas?


I've got a Select Query that looks like:

	SELECT IIf(IsNull([ARMS_Due_DT]) And [SemiAnnual_REQ]>0,"Yes",Null) AS GeneratedDue,
IIf(DatePart("q",Date())>2,[ITS_Current_Events_Fixed]![2SemiAnnual_ACC],[ITS_Current_Events_Fixed]![1SemiAnnual_ACC]) AS
Accomplished, IIf([SemiAnnual_REQ]-[Accomplished]>0,[SemiAnnual_REQ]-[Accomplished],0) AS Remaining,
IIf([Qty_Freq]=0,Null,[Qty_Freq] & " " & [Freq]) AS Frequency, ITS_Current_Events_Fixed.Unit, ITS_Current_Events_Fixed.SSAN,
ITS_Current_Events_Fixed.Name, ITS_Current_Events_Fixed.LAST4, ITS_Current_Events_Fixed.Flyer_Type,
ITS_Current_Events_Fixed.CPOS, ITS_Current_Events_Fixed.TaskID, tblTasks.Task_ID, tblTasks.TaskDescription,
tblTasks.TaskLineNum, tblTasks.TaskRemarks, tblTasks.SectionID, tblTaskTypes.SectionName, tblTaskTypes.SectionPageNum,
tblTaskTypes.SectionRemark, ITS_Current_Events_Fixed.ACC_DT, ITS_Current_Events_Fixed.ARMS_Due_DT,
ITS_Current_Events_Fixed.Due_Date_Flag, ITS_Current_Events_Fixed.Qty_Freq, ITS_Current_Events_Fixed.Freq,
ITS_Current_Events_Fixed.SemiAnnual_REQ, ITS_Current_Events_Fixed.Qtr_REQ, ITS_Current_Events_Fixed.Month_REQ,
ITS_Current_Events_Fixed.[1Qtr_ACC], ITS_Current_Events_Fixed.[2Qtr_ACC], ITS_Current_Events_Fixed.[3Qtr_ACC],
ITS_Current_Events_Fixed.[4Qtr_ACC], ITS_Current_Events_Fixed.[1SemiAnnual_ACC], ITS_Current_Events_Fixed.[2SemiAnnual_ACC],
FROM (ITS_Current_Events_Fixed LEFT JOIN tblTasks ON ITS_Current_Events_Fixed.TaskID = tblTasks.TaskID) LEFT JOIN
tblTaskTypes ON tblTasks.SectionID = tblTaskTypes.SectionID
WHERE (((ITS_Current_Events_Fixed.Name) Is Not Null) AND ((ITS_Current_Events_Fixed.TaskID) Is Not Null));

And a Crosstab Query that looks like:

SELECT [1AllEvents].SSAN, [1AllEvents].TaskID
FROM 1AllEvents
WHERE ((([1AllEvents].TaskID) Is Not Null))
GROUP BY [1AllEvents].SSAN, [1AllEvents].TaskID
PIVOT [1AllEvents].Method;

I'm then trying to combine the two above in a query that looks like the following:

	SELECT ITS.Unit, ITS.SSAN, ITS.Name, ITS.LAST4, ITS.Flyer_Type, ITS.CPOS, ITS.TaskID, ITS.Task_ID, ITS.TaskDescription,
[1LastDone].N, [1LastDone].S, ITS.TaskLineNum, ITS.TaskRemarks, ITS.SectionID, ITS.SectionName, ITS.SectionPageNum,
ITS.SectionRemark, ITS.ACC_DT, ITS.ARMS_Due_DT, ITS.Due_Date_Flag, ITS.Qty_Freq, ITS.Freq, ITS.SemiAnnual_REQ, ITS.Qtr_REQ,
ITS.Month_REQ, ITS.[1Qtr_ACC], ITS.[2Qtr_ACC], ITS.[3Qtr_ACC], ITS.[4Qtr_ACC], ITS.[1SemiAnnual_ACC], ITS.[2SemiAnnual_ACC],
ITS.SIM_ACC, ITS.Frequency, ITS.Remaining, ITS.Accomplished, ITS.GeneratedDue
FROM 1LastDone RIGHT JOIN ITS ON ([1LastDone].TaskID = ITS.TaskID) AND ([1LastDone].SSAN = ITS.SSAN);

And after all of that hard work and careful consideration I get:

"Type mismatch in expression"

I attached some screenshots as well.

Any help would be greatly appreciated.

I have a table called Inflation Rates and one called Project Info.

Project Info has the field "Date Completed", and Inflation Rates has "Date Year" and "Cost Index".

My first query is called "Project List Query" which has the fields "Project Info.*" as well as the calculated fields:

Year Completed: Nz(Year([Actual Completion]),"1900")
Current Year: Year(Now())

The second query is called "Project Inflation", which has the following SQL source:

SELECT [Adj Contract Amount]/[Size (sq ft)] AS [Adj Cost/SF], IIf([Inflation Rates].[Cost Index]=0,[Contract Amount],[Contract Amount]*([Inflation Rates_1].[Cost Index]/[Inflation Rates].[Cost Index])) AS [Adj Contract Amount]
FROM ([Project List Query] LEFT JOIN [Inflation Rates] ON [Project List Query].[Year Completed] = [Inflation Rates].[Date Year]) LEFT JOIN [Inflation Rates] AS [Inflation Rates_1] ON [Project List Query].[Current Year] = [Inflation Rates_1].[Date Year];

The bolded section represents the joins for the query, and the unbolded part is my two calculated fields, the only two in the query:

Adj Cost/SF: [Adj Contract Amount]/[Size (sq ft)]
Adj Contract Amount: IIf([Inflation Rates].[Cost Index]=0,[Contract Amount],[Contract Amount]*([Inflation Rates_1].[Cost Index]/[Inflation Rates].[Cost Index]))

My issue is that when I run the query "Project Inflation", I receive the error "Type mismatch in expression." Normally this is an error of data types, but I can figure out where. I have tried removing the calculated fields, but still receive the error - which leads me to believe that the error exists in the joins.

With the joins, there is two relationships: "Project List Query" --- "Inflation Rates", between "Year Completed" and "Date Year", respectively. Also, "Project List Query" --- "Inflation Rates_1", between "Current Year" and "Date Year", respectively.

The data type of "Date Year" is long integer, and I have tried changing it to short integer as well. According to an access reference,
the data type of the Year() function is an integer as well.

So where is my "type mismatch"?

Hello I am trying to create a VBA script which removes duplicates from a single table. It searches for duplicates based on two fields (IDtable1 and IDtable2) puts them in a string and then if the string is a duplicate to the one preceeding then it deletes that line.

That part is ok, but there seems to be an overflow problem. The table is 'overflowing' on the ID (autonumber) of the table which should be straightforward enough. Debugging it highlights the line id1 = rstJunction("ID").Value. I've set id1 as an Integer which I thought would match up nicely, but notice the ID numbers are quite high (in excess of 79,000) and as a result there is an overflow error.

I then tried setting id1 as either Long, Single or Double and the error that I get is the following:
Run-time error '-2147217913 (80040e07)': Data type mismatch in criteria expression. The debugging highlight goes over the line cn1.Execute SQLd

Perhaps something with my SQL command?

Here is the code, minus the open recordset such-and-such:

Dim strDuplicate1 As String
Dim strDuplicate2 As String
Dim id1 As Long
Dim SQLd As String
strDuplicate1 = ""
strDuplicate2 = ""
id1 = 0
If rstJunction.BOF And rstJunction.EOF Then
MsgBox "No matches found"
id1 = rstJunction("ID").Value
Do Until rstJunction.EOF
strDuplicate1 = rstJunction("IDtable1").Value & rstJunction("IDtable2").Value
If strDuplicate1 = strDuplicate2 Then
SQLd = "DELETE FROM tblJunction WHERE ID = ('" & id1 & "')"
cn1.Execute (SQLd)
strDuplicate2 = rstJunction("IDtable1").Value & rstJunction("IDtable2").Value
End If
id1 = 0
End If

I'm getting the "data type mismatch in criteria expression" error on following piece of silly code. Anybody knows why?

Private Sub Delete_ConsignmentH()
Set Dbase = Application.CurrentDb

sSQL = "DELETE * FROM consignmenth "
sSQL = sSQL & "WHERE (((DateSerial(Left([CONSIGNMENTH]![DESPATCH DATE],4), "
sSQL = sSQL & "Mid([CONSIGNMENTH]![DESPATCH DATE],7,2))) < Date()- " & DaysOld & "))"
Dbase.Execute sSQL
sAddevent "delete consignmentH klaar"
End Sub

Thanks in advance for your help.

Hi all,

I get the below error msg:

Data type mismatch in criteria expression

when running a macro in Access; the only way to solve it is to go to the source table, change one field from BINARY to TEXT which solves the issue, however I would like to avoid doing this interim step manually, any ideas how I may solve that issue once and for all?

Thank you

I get a “Type mismatch in join expression” error when I try to run below SQL:

SELECT Query5.promotionType, Query5.DirectorCode, Query5.Code, Query5.tempYear, Query5.Month, Query5.ManagerName, NewQuery.Accrual
FROM NewQuery INNER JOIN Query5 ON (NewQuery.tempMonth = Query5.Month) AND (NewQuery.tempYear = Query5.tempYear) AND (NewQuery.Code = Query5.Code) AND (NewQuery.RegionalDirectorCode = Query5.DirectorCode) AND (NewQuery.PromotionType = Query5.promotionType);

Note that Query5 doesn’t display results though. This is the SQL for Query5:

SELECT Query4.promotionType, Query4.DirectorCode, Query4.Code, Query4.tempYear, Query4.Month, Query4.ManagerName
FROM NewQuery LEFT JOIN Query4 ON NewQuery.tempYear = Query4.tempYear
GROUP BY Query4.promotionType, Query4.DirectorCode, Query4.Code, Query4.tempYear, Query4.Month, Query4.ManagerName;

And from the above, you’ll notice references to Query4.tempYear, which is an expression I added to Query4 and have it contain an EMPTY STRING against which, in Query5, I am trying to do a LEFT JOIN from NewQuery.tempYear to Query4.tempYear

And then the error message comes up I mentioned at the start of this post. Any idea why?

Hello Party people,

I have written a union querry which runs for a bit then gives me this error message
Data type mismatch in criteria expression. (Error 3464)

The explanation for the error is as follows.

The criteria expression in a Find method is attempting to compare a field with a value whose data type does not match the field’s data type.

My understanding of this is that not all fields in both tables are of the same format.

Please correct me if i'm wrong.

I have quite a number of fields, so i was wondering if there is a fast way to compare them, say by a querry or tool.

And if this is not the cause, can someone please advice on the best way forward, lest i waste my whole day going down the wrong path.

Kind regards

Hi all
Can anyone help with this error message that keeps occuring. 'Run-Time error 3464 Data Type Mismatch In Criteria Expression.' It happens in my code below in the line highlighted in red. Thanks in advance

Option Compare Database
Option Explicit

Private Sub Custodian_History_Form_Enter()

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim rs2 As DAO.Recordset
Dim strQuery1 As String
Dim strQuery2 As String

Dim nod As Object
Dim strNode1Text As String
Dim strNode2Text As String
Dim strVisibleText As String

Dim strMessage As String
Dim intVBMsg As Integer

Set db = CurrentDb()
strQuery1 = "select DISTINCT AssetNumber from [Asset Master]"
With Me![Custodian History Form]
Set rs = db.OpenRecordset(strQuery1) ', dbOpenForwardOnly)
Do Until rs.EOF
Debug.Print rs![AssetNumber]
strNode1Text = StrConv("Level1" & rs![AssetNumber], _
Set nod = .Nodes.Add(Key:=strNode1Text, Text:=rs![AssetNumber])
nod.Expanded = False

strQuery2 = "select DISTINCT AssetNumber, [Asset Name] from [Asset Master] where [AssetNumber] = '" & nod.Text & "'"
Set rs2 = db.OpenRecordset(strQuery2)
Do Until rs2.EOF
strNode2Text = StrConv("Level2" & rs2![Changes In Asset], vbLowerCase)
strVisibleText = rs2!AssetNumber
'if modelname is null, will have problem
If IsNull(rs2!AssetNumber) Then
MsgBox "number is null"
strVisibleText = "No Name"
End If
Set nod = .Nodes.Add(relative:=strNode1Text, relationship:=tvwChild, _
Key:=strNode2Text, Text:=strVisibleText)
End With

End Sub

Hi All

I have a form with two comboboxes named startdate and enddate with which calendar control is attached so that we can select any date from calendar and that would appear in each box and there is one command button in that form. I have created a report that has huge amount of data. now i just want to select only data data from the report that lies between the values present in startdate and enddate boxes on the form. I have written the following code. If i dont use mysCriteria the it works fine and dispay the whole report but if i use this criteria expression then an error comes up 'data type mismatch in criteria expression'. Could anyone please tell me the problem in myscriteria.

Private Sub Command1_Click()

On Error GoTo Err_btnGen3_Click

Dim stDocName1 As String
Dim stDocName2 As String
Dim mysCriteria As String
Dim topLabelOnReport As String

stDocName1 = "MI - DocumentRequests with RequestDate,Deadline,DateSentOrNotSen"

'Set the Date Range

mysCriteria = "(Datevalue(DateTimeRequested)>=#" & Format(Me.StartDate.Value, "MM/DD/YY") & "# And" & _
" Datevalue(DateTimeRequested)

I'm pulling data from an SQL database into Access2007 through a linked table. There are two time fields: [STOP] and [ACK], both in the form HH:MM:SS, and I have a field called DOWNTIME_SEC that calculates the difference between those times, in seconds, with the formula

CLng(IIf([STOP]="ERR" Or [ACK]="ERR","",Round((CDate([ACK])-CDate([STOP]))*60*60*24,0)))

which gives me accurate results.

My report is grouped by date, and the date footer contains the formula =Sum([DOWNTIME_SEC]), but that causes the error "Data type mismatch in criteria expression."

I've tried CDbl, Val, etc, but to no avail. CInt gives me an overflow error. I've even created another field called [OTHER] and tried converting [DOWNTIME_SEC] to various formats, but I end up with the same problem. I've created another table and typed the data in manually (using the same formula for [DOWNTIME_SEC]), produced a report from it, and THAT works, but I can't do that hundreds of times a day every day. I would like to do this with only regular queries and without resorting to VBA, Macros, or any other 'fancy' stuff. Any suggestions? Attached Thumbnails     Reply With Quote 05-17-2011, 09:05 AM #2 NTC VIP Windows Vista Access 2007 Join Date Nov 2009 Posts 1,271 off the cuff thoughts....

CLng(IIf([STOP]="ERR" Or [ACK]="ERR","",....etc

might change to:
CLng(IIf([STOP]="ERR" Or [ACK]="ERR",0,....etc

and I am just dwelling on casting a date nested inside a cast for long and wondering about that....

sanity check maybe splitting those two steps and eyeballing things....maybe test each half separately

maybe helps - not sure....

in a query I am calculating DateDiff. I have an expression which puts a price into a column if datediff < 30. When I try to total that price in a report (in the groupby footer), with the expression =sum([thenameofthatpricecolumn]) I get a 'data type mismatch in criteria expression' error.
I have tried changing everything I can think of to sort the problem out, but it's now driving me insane. If you can help, I will be extremely grateful.

many thanks

I have set up a report filter based on the example by Martin Green:
This was all working very nicely indeed, without any errors.
However, I have transferred the database from one pc to another (using an external drive) and I am now receiving the error message 'Data type mismatch in criteria expression' when trying to filter.
Both PCs are using the same OS and version of Office (2003).
I suspect it is something to do with one of the filter criteria being based on a date, though how Access picks and chooses when or not to tell me there is an error is beyond me.
A bit more about what I'm trying to do:
I wrote a simple module to extract the "year" from a date that falls within a particular range:

	Public Function Vintage(EDate As Date) As Integer
    Select Case EDate
        Case Is < 0
            Vintage = "-Error"
        Case Is < #6/1/1995#
            Vintage = "1995"
        Case Is < #6/1/2011#
            Vintage = "2011"
        Case Is < #6/1/2012#
            Vintage = "2012"
        Case Is = Null
            Vintage = ""
        Case Else
            Vintage = "Error"
    End Select
End Function

A query then calculates the year/vintage of dates for particular activities using the expression: Vintage: Vintage([MSampleDate])
This works fine in the query, and the report is based on the query.
I am thinking that when the filter is trying to filter based on eg "2007" the reference is going back to the previous query/function and the syntax of the code is not right for choosing a date.
The relevant bit of the filter code is:

	' Build criteria string from lstYear listbox
    For Each varItem In Me.lstYear.ItemsSelected
        strYear = strYear & ",'" & Me.lstYear.ItemData(varItem) & "'"
        Next varItem
    If Len(strYear) = 0 Then
        strYear = "Like '*'"
        strYear = Right(strYear, Len(strYear) - 1)
        strYear = "IN(" & strYear & ")"
    End If

' Build filter string
    strFilter = "[VineyardName] " & strVineyard & _
                " AND [Vintage] " & strYear

My filter box looks a bit like Mr Green's, except the list box on the right contains a list of years.
Can anyone help with my syntax and/or why Access does this when changing machines?

Not finding an answer? Try a Google search.