Queries :: Average Calculated Field From A Previous Query - Crosstab Data Type Mismatch
Jun 3, 2014
I am trying to construct a crosstab that averages a calculated field from a previous query. It is returning a "Data Type Mismatch" message.
The field I am trying to average is a subtraction of dates to find total days. I assume my field is not a number so I have tried to wrap it in CDbl() to change the type.
The formula is
Code:
CASE_DAYS: CDbl(IIf([Actual Close Date]-[Creation Date]>=0,[Actual Close Date]-[Creation Date],""))
I'm receiving an error indicating there is a data type mismatch when running a query named qappInventoryTakeOn.
Data is entered into the Inventory Transaction Form. If the transaction type is "Take On", when the update button is clicked the record will be saved to tblInventoryMovements and then qappInventoryTakeOn should run to update tblInventory, but I keep running into the aforementioned error.
I have an update query for tGLCashAccount where it adds a value from another table with the BeginningBalance to arrive at CurrentBalance.
Here's what it looks like in design view:
Field: CurrentBalance Table: tGLCashAcct Update to: [tMakeNewCashBal].[TotalPrice]+[tGLCashAcct].[BeginningBalance]
Here is SQL code: UPDATE tGLCashAcct, tMakeNewCashBal SET tGLCashAcct.CurrentBalance = [tMakeNewCashBal].[TotalPrice]+[tGLCashAcct].[BeginningBalance] WHERE (((tGLCashAcct.GLCashAcctID)="102"));
I get the error: data type mismatch in criteria expression when I run it.
I went into the properties if that field inside the query design and changed it to Standard with 0 decimal places and it worked fine.
But when I based a crosstab query off the query that contained the above calculated field, I cannot seem to get the numbers to format correctly. 1231313.424 is shown instead 1,231,313 and I don't have a line in the Properties window to even change the decimal places. It doesn't recognize when I change the format to Standard. I have tried using Round([ProjRevNRC]) which gets rid of the decimal places as desired but does not show commas.
I'm sure it's a simple part of the Round expression that I am missing but nothing has worked.
I'm trying to create a query based on another query. However, my WHERE statement is causing a data type mismatch for a date. My code is:
Code: SELECT id, status, updated, [previous renewal] FROM qrynext renewal WHERE status = "active" and [previous renewal] = date()
If I remove the " and [previous renewal] = date()" it works just fine. But even setting up [previous renewal] to equal #7/17/14# or "07/17/14" or anything else I've tried won't work. The field that it's based on is definitely a date field, but I don't know why it would cause a data type mismatch.
This code runs to the set frm part then i get a type mismatch? ive tried a few different things and still nothing?
Code:
Private Sub Report_Open(Cancel As Integer) ' Create underlying recordset for report using criteria entered in ' EmployeeSalesDialogBox form. Dim intX As Integer Dim qdf As QueryDef Dim frm As Form ' Set database variable to current database. Set dbsReport = CurrentDb
I am getting this error in a query. The field generating the error is a calculated field using a custom function.The function is:
Code:
Public Function DecimalTime(dblEvalTime As Double) As Double DecimalTime = Hour(dblEvalTime) DecimalTime = DecimalTime + (Minute(dblEvalTime) / 60) DecimalTime = DecimalTime + ((Second(dblEvalTime) / 60) / 60) DecimalTime = Round(DecimalTime, 2) End Function
The dbalEvalTime parameter is passed in to the function as (DateIn+TimeIn)-(DateOut+TimeOut).
So the data type passed in is Double and the Function result is Double. The criteria i am applying in the query is simply <0.01. I have formatted the query field as #.00, 0.00 and General Number but it makes no difference.
I have also tried creating a second query using the first as its data source and applying the criteria in that query but still get the same error. Without the criteria the query runs fine.
Code: SELECT prevwd([practice_bacs_submission_date])<Date() AS chase_it, practice_bacs.practice_bacs_submission_date FROM practice_bacs WHERE (((practice_bacs.practice_bacs_submission_date)>#1/31/2013#));
and in the query results I see 0 and -1 as expected for the 'chase_it' expression BUT When I add True (or -1, or 0) as a criteria for 'chase_it', I get the "Data type mismatch in criteria expression" error.So the sql that fails is
Code: SELECT prevwd([practice_bacs_submission_date])<Date() AS chase_it, practice_bacs.practice_bacs_submission_date FROM practice_bacs WHERE (((prevwd([practice_bacs_submission_date])<Date())=True) AND ((practice_bacs.practice_bacs_submission_date)>#1/31/2013#));
In case it's relevant, my function prevwd is:
Code: Function prevwd(dt As Date) As Date 10 On Error GoTo prevwd_Error 20 dt = dt - 1 30 While Weekday([dt]) = 1 Or Weekday([dt]) = 7 Or IsBankHoliday(dt)
[code]...
and this function is used extensively and always works perfectly. I have tried using DateAdd instead of dt = dt - 1, but that made no difference.
So I am working with a table that has 2 text fields called DestructionMonth and DestructionYear. The data in DestructionMonth is a 2 character month (01 through 12), and year is a 4 character field.
What I need to do is find all records where the destructiondate is within 60 days/2 months.
I have tried this many different ways and am still getting an error.
So this query works fine:
SELECT documentstable.destructionmonth, documentstable.destructionyear, documentstable.id, Now() AS Expr1, Date() AS Expr2, DateAdd('m',2,destructionyear+"/"+destructionmonth) AS Expr3, Format(destructionyear+"/"+destructionmonth+"/"+"01","Short Date") AS Expr4, CInt(DateDiff("d",Format(destructionyear+"/"+destructionmonth+"/"+"01","Short Date"),Date())) AS MyDateDiff FROM documentstable
It gives me MyDateDiff in the last column, the difference between the destructiondate and the current date. That works great.
But if I add a where clause with this: CInt(DateDiff("d",Format(destructionyear+"/"+destructionmonth+"/"+"01","Short Date"),Date())) < 60
I get "Data Type Mismatch in criteria expression".
The value I am comparing to the 60 is an integer! How is it a mismatch?! Removing the CInt (which I had though was unnecessary anyway) doesn't work.
I have a query with a field defined in the query as follows:
Next Bill Date: IIf(IsNull([dtmLastBillDate]), DateSerial(Year([dtmDateRecd]),Month([dtmDateRecd])+1,15), DateSerial(Year([dtmLastBillDate]),Month([dtmLastBillDate])+[lngNumMonths],15))
I can't seem to set any criteria for this field without getting an error: 'Data Type Mismatch in Criteria Expression'
Examples of criteria that I've tried: =#1/1/2005# >#1/1/2005# =Date() Year([Next Bill Date]) = Year(Now())
All of the above generate that same error. {I've seen many pages/posts regarding 'data type mismatch' but none seem to relate directly to this situation.}
ID (Type Text) Title (Type Text) Remarks(Type Text) Formatted: FormatTitle([title],[Remarks]) Expr1: InStrRev([Formatted], "~")
public functionFormatTitle(ByVal sTitle as String, ByVal sRemarks as String) as String 'do process code here very complicated an long, but works find in the end 'creates a Multi-String delimited by | (pipe) end function
The above works, and Expr1 does give an accurate value for the position of a "~" (tilde) in the string Created by the FormatTitle() function.
However, If I put a Criteria >0 on Expr1 it asks for the value of the [Formatted] field as if it was a parameter. If I put a criteria for Formatted: Like "*~*" I get a Data Type Mismatch in Query Criteria
This Query Also produces the Data Type Mismatch in Query Criteria pardon me, but WTF? If it isn't a STring, than InStrRev() should produce an error, not an accurate response, and if InStrRev() produces a number why can't i compare it to 0 (zero)? This is indubitably messed up that I'm getting this error. There is no data type mismatch, on either of these tests, one is a string and I criteria-limit it by a string operation, the other is a number and I criteria limit it by a number, WHAT IS GOING ON!!!
Thanks Jaeden "Sifo Dyas" al'Raec Ruiner - The Frustratedly Confused
I am working on a fairly ancient manufacturing database that identifies items using a combination of letters and numbers. The usual format is to have a letter (which suggests something about the item type) followed by a sequence of numbers.
I am trying to write a query that looks up all the records beginning with a prefix or arbitrary length, strips away the text, and finds the highest number.
Code:
SELECT Right(LocalID,Len(LocalID) - 1) As IDSuffix FROM tblItemIDCrossReference WHERE Left(LocalID,1) = 'T' AND IsNumeric(Right(LocalID,Len(LocalID) - 1)=True)
This query produces the error given in the title of this thread, whilst the following works:
Code:
SELECT Right(LocalID,Len(LocalID) - 1) As IDSuffix FROM tblItemIDCrossReference WHERE Left(LocalID,1) = 'T' AND IsNumeric(Right(LocalID,5)=True)
This related query also works and shows a load of -1s and 0s correctly
Code:
SELECT Right(LocalID,Len(LocalID) - 1) As IDSuffix, IsNumeric(Right(LocalID,Len(LocalID) - 1)=True) As Alias FROM tblItemIDCrossReference WHERE Left(LocalID,1) = 'T' AND
But once again shows the error message when I try to filter the field Alias to -1 or 0 only through the right-click menu.I have tried piping Len(LocalID)-1 through CLng, CInt, Int, CDbl and CSng; this changes the error to 'Invalid Use Of Null' I have also tried removing the '=True' from the IsNumeric() term.
I obtained data for earnings by industry for men and women over time (5 years). I developed crosstab query that showed the average earnings for men and women for the 5 years.
Now I want within this query to calculate the differential between men and womens average earnings and calculate a percentage within this crosstab query. I tried to use Expressionbuilder with little luck.
Working with two tables - tbl_A_OrdData & tbl_B_ShipData tbl_A have all the orders placed, but tbl_B only have the orders that got shipped. I'm trying to create a query that will show me all orders that got placed for a particular criteria and if the order find a match in tbl_B to give me the ship date too. A left joint query get me the data I need. But my dates are in YYYYMMDD number format so in the query I am putting the DateValue function. And that error out as "data type mismatch" because it cannot find the shipdate for certain records. I tried this but didnt work. ShipDt: IIf (IsNull ([PSHPDT]), "", DateValue(Mid([PSHPDT],5,2) & "/" & Right([PSHPDT],2) & "/" & Left([PSHPDT],4)))
SELECT SubscheduleID, EventID, WeekOrder, DayID, StartTime, EndTime, Priority, CanJoin, PatientTitle, PatientNickname, IncludesPatient, IncludesAftercare, Letter1 FROM [qryScheduleCombinedDetails] WHERE (SubscheduleID = 1 AND IncludesPatient = -1 AND DuringAftercare <> "AC only" AND (WeekOrder = "All" OR WeekOrder = 3 OR (WeekOrder = 1 AND Letter1 = "XYZ")) AND DayID = 2 AND StartTime <= #8:00:00 AM# AND EndTime >= #8:30:00 AM#);
When I try to run it, I get a "data type mismatch" error. When I put the same code into a query, I get the same error. However, it will run if I delete either condition from within the (WeekOrder = 1 AND Letter1 = "XYZ") pairing. I can't figure why it can run with either of those, but not both together.
WeekOrder is defined as String. Letter1 is calculated as Cstr(Nz(IIf(Letter,"XYZ","ABC"))) within [qryScheduleCombinedDetails], because I wanted to make sure that it would be recognized as a string.
I am creating a database that will record the details of approx 30 shops and will store information on Annual Turnover, Profit, Return, etc.
I need to create a field that will calculate the increase/decrease in annual turnover between the current year and the previous year.
So far I have created a subform that will show the last 12 years of data for the particular shop, but now I need to add a calculated field that will get the current years turnover and also reference the turnover for the previous year, i.e. the previous record., and display the result. The other thing that I will need to do, is to have this field not calculated for the initial years trading, so this field will need to be hidden in the first record.
Can someone please offer some advice on how to go about achieving this???
I found the attached example a while back (can't find the site again though ) and it calculates a moving average. I've hacked out the parts I need for my own work and I can create my moving average query without an issue.
However, I need to extract the MA data into a table so planned on using append. I kept getting type errors so I tried make table to see what type it was creating and it appears to be Short Text rather than a number.
I've added an extra button and Make Table query to the example.
As far as I can tell from the code, the moving average value when calculated is a Single. However, when I write it to the table, its a Short Text.
How do I make the created Table use Number Type for my calculated moving average?
BUT IT JUST GIVE ME THE VALUE LIKE A NUMBER SUCH AS e.g. 50 ,150 but instead of that i want currency data type of that calculate field for e.g. 50 become "$ 50".
Okay so in able to do that i go to properties Sheet of the field of the query and change Format to Currency ..BUT IT DOESN'T CHANGE !!!
I am trying to change the data type of a field in a table from calculated to something else. It gives me the error "this data type cannot be changed once the field has been saved"
Ive been working at this problem for a while now and I can't figure it out. I have a table full of Work Orders, and on the form for inputing the Work Order data, there is a field for the date that the WO was received, and the date it is wanted. There is also a field that tells if this was a rush job (Yes/No) field.
I need to make a query that will grab all the rush jobs, and sort by how many days were between the date received and date wanted. This would be easy, just subtracting the dates, but I need to have it not include weekends and holidays. I found an algorithm to do that and it seems to work well. However, when I run the query, it gives me a "Data type mismatch in criteria expression." error. At this point, to debug it, I put in a message box to see if it processes any entries. It does process them one at a time, but once it gets to a certain point I get that error. I have checked all the dates, making sure they are all valid and they are. I'm just really stumped here. Here is the code for my query:
SELECT [Usable Orders].[AI Number], [Usable Orders].[District Name], [Usable Orders].[CCM Name], [Usable Orders].[8255 Received], [Usable Orders].[Date Wanted], [Usable Orders].Rush, WorkingDays2([8255 Received],[Date Wanted],[AI Number]) AS [Working Days] FROM [Usable Orders] GROUP BY [Usable Orders].[AI Number], [Usable Orders].[District Name], [Usable Orders].[CCM Name], [Usable Orders].[8255 Received], [Usable Orders].[Date Wanted], [Usable Orders].Rush HAVING ((([Usable Orders].Rush)="Yes") AND ((WorkingDays2([8255 Received],[Date Wanted],[AI Number]))<=10));
and here is the code for my WorkingDays2 (counts all working days excluding holidays) the AINumber field I put in for debugging purposes to see which entries were being processed.
Public Function WorkingDays2(StartDate As Date, EndDate As Date, AINumber As String) As Integer '................................................. ................... ' Name: WorkingDays2 ' Inputs: StartDate As Date ' EndDate As Date ' Returns: Integer ' Author: Arvin Meyer ' Date: May 5,2002 ' Comment: Accepts two dates and returns the number of weekdays between them ' Note that this function has been modified to account for holidays. It requires a table ' named tblHolidays with a field named HolidayDate. '................................................. ................... On Error GoTo Err_WorkingDays2
Dim intCount As Integer Dim rs As Object Dim stSql As String Dim con As Object Dim Message As String
If StartDate > EndDate Then MsgBox "Start Date is After End Date" WorkingDays2 = -1 GoTo Exit_WorkingDays2 End If
stSql = "SELECT [HolidayDate] FROM tblHolidays"
'StartDate = StartDate + 1 'To count StartDate as the 1st day comment out the line above
intCount = 0 Set con = Application.CurrentProject.Connection Set rs = CreateObject("ADODB.Recordset") rs.Open stSql, con, 1 ' 1 = adOpenKeyset 'MsgBox "Today is " & Weekday(StartDate) & ", " & StartDate & "Opening AI Number is " & AINumber Do While StartDate <= EndDate rs.Find "[HolidayDate] = #" & StartDate & "#" If Weekday(StartDate) <> vbSunday And Weekday(StartDate) <> vbSaturday Then If rs.EOF Then intCount = intCount + 1 ' Message = Message & " and today is a work day." End If Else ' Message = Message & "and today is not a work day." End If ' MsgBox Message 'rs.MoveNext StartDate = StartDate + 1 Loop 'MsgBox "Closing AI Number " & AINumber & "Count is " & intCount 'MsgBox "After Loop count is " & intCount & " and today is " & StartDate WorkingDays2 = intCount 'MsgBox "Date is " & StartDate & "AI Number is " & AINumber & " and there were " & intCount & " days." Exit_WorkingDays2: Exit Function
Err_WorkingDays2: Select Case Err
Case Else MsgBox Err.Description & "Start date is " & StartDate & "End Date is " & EndDate Resume Exit_WorkingDays2 End Select
I am querying results using Access 97(Yes its old and no my company is not willing to upgrade.....:confused:). Anyhow, I am connecting to a corporate database that has two tables I am querying that should be joined on one field (wmg.wmgtk01_tnk.sys_i = wmg.wmgwo04_halfleg_actl.tnk_sys_i). I am running into a problem with these fields because they have been defined differently by my IT department. The "sys_i" field is a NUMBER of length 5, while the "tnk_sys_i" field is a NUMBER of length 20. Is there a way that I can trick Access into joining these fields even though they do not match? I am currently getting a "Data Type Mismatch" error when I attempt to create this join.
I've been studying unbound for quite awhile and i've build to forms but i seem to get stumped with datatype mismatch. I've tried everything that i would possibly know. I guess i'm just to new in access to try this but it's the only thing that works for what i'm trying to do can some1 please provide me some assistance. I've attached both forms. YOUR HELP WILL BE GREATLY appreciated.
Now the problem, when adding or editing info i get datatype mismatch -21233 some number of that sort....
I am trying to print letters from access using a command button. It works well, but when I try to print the displayed record, I get "Data type mismatch in criteria expression".
The primary key is a 9-digit number where some have a leading zero. I have made this as text so I do not loose the leading zero.
Here is the code when the command button is pressed:
Private Sub Command1315_Click() Dim strWhere As String If Me.NewRecord Then 'Check there is a record to print MsgBox "Select a record to print" _ , vbInformation, "Select a Record" Else 'The Student ID Number is the name of the Primary Key
strWhere = "[STUDENT_ID] = " & Me.[STUDENT_ID] DoCmd.OpenReport "HONORS_LETTER", acViewPreview, , strWhere End If End Sub
I'm having some problems with a simple query and it's driving me nuts. The invoice numbers in our system have hyphens in them, and I'm trying to find invoice numbers whose part before the hyphen matches a number I enter. Here's my SQL:
SELECT dbo_NIHB_ClaimLog.InvoiceNum, Left([InvoiceNum],InStr([InvoiceNum],"-")-1) AS InvoiceNumLeft FROM dbo_NIHB_ClaimLog WHERE (((dbo_NIHB_ClaimLog.InvoiceNum) Is Not Null) AND ((Left([InvoiceNum],InStr([InvoiceNum],"-")-1))=23316));
I'm getting a "Data Type Mismatch In Criteria Expression" error, and I can't figure out why. I've wrapped a Clng() around the Left() function, but that doesn't help either.
I have two tables, one has the autonumber column, sysid, and then in the process of updating the database via forms the sysid from one table is placed in another (text format). I thought I could use that to link the tables for queries, but I am running into a data/type mismatch error.