กระทู้เก่าบอร์ด อ.Yeadram
        
           5,851   22		  
          
					  
		    URL.หัวข้อ / 
		    URL
        
        dlookup ตัวเลข      
    
      รบกวนสอบถาม อ.yeadram และผู้รู้ทุกท่านครับ
ผมใช้ คำสั่ง dlookup ฟิล์ดที่เป็น Number แต่ค่าที่ได้กลับกลายเป็น
string แทน ทำไง ถึงจะได้เป็นค่าตัวเลขเหมือนเดิม หรือ มีฟังค์ชั่นอื่น
อีกหรือไม่ครับ
ขอบคุณมากครับ
    
  ผมใช้ คำสั่ง dlookup ฟิล์ดที่เป็น Number แต่ค่าที่ได้กลับกลายเป็น
string แทน ทำไง ถึงจะได้เป็นค่าตัวเลขเหมือนเดิม หรือ มีฟังค์ชั่นอื่น
อีกหรือไม่ครับ
ขอบคุณมากครับ
				22 Reply in this Topic. Dispaly 2  pages and you are on page number 1 
				
        
    1 @R05722    
        
  
      ลองครอบด้วย nz(.....,0) ครับ    
    
  
        
    2 @R05725    
        
  
      DLookUp( ) ให้ค่าคืนมาเป็น Variant data type ซึ่งจะมี sub data type ตรงตามประเภทของฟิลด์ที่เราค้นหา  ถ้าฟิลด์เป็น Numer ยังไงมันก็คืนค่าเป็นประเภทที่เกี่ยวเนื่องกับ Number   ถ้าฟิลด์เป็น Text ยังไงมันก็คืนค่าเป็น String ครับ  ตัวแปรที่ไปรองรับค่าที่รับคืนควรมีประเภทเป็น Variant ด้วย เนื่องจากถ้าค้นหาตามเงื่อนไขที่เรากำหนดไปไม่เจอ ค่าที่คืนจะเป็น Null ซึ่งมีเฉพาะ Variant data type เท่านั้นที่เก็บค่า Null ได้  ไม่เช่นนั้นมันจะเกิด runtime error ได้
ดังนั้นจึงไม่เข้าใจว่าได้ค่ากลับมาเป็นคนละ data type ได้อย่างไร ลองยกตัวอย่างอย่างละเอียดให้ดูได้ไหมครับ
    
  ดังนั้นจึงไม่เข้าใจว่าได้ค่ากลับมาเป็นคนละ data type ได้อย่างไร ลองยกตัวอย่างอย่างละเอียดให้ดูได้ไหมครับ
        
    3 @R05726    
        
  
      ขอบคุณทั้งสองท่านที่ตอบครับ
ขอยกตัวอย่างให้ อ.สันติสุข พรหมสิริ ดูนะครับ
สมมุติ ใน table tblTest ผมมี 2 ฟิลด์ คือ
id (Autonum) textNum (Number)
1 100
2 200
3 250
4 400
.. .....
และผมใช้ Query ในการดึงข้อมูลบางตัวไปนะครับ เช่น
Dlookup("textNum","tblTest","id=3") ผลที่ได้ก็จะเป็น 250
แต่มันชิดขวา ผมเข้าใจว่ามันจะกลายเป็นข้อมูลประเภท text ไป
ถูกต้องหรือไม่ครับ
ขอบคุณมากครับ
    
  ขอยกตัวอย่างให้ อ.สันติสุข พรหมสิริ ดูนะครับ
สมมุติ ใน table tblTest ผมมี 2 ฟิลด์ คือ
id (Autonum) textNum (Number)
1 100
2 200
3 250
4 400
.. .....
และผมใช้ Query ในการดึงข้อมูลบางตัวไปนะครับ เช่น
Dlookup("textNum","tblTest","id=3") ผลที่ได้ก็จะเป็น 250
แต่มันชิดขวา ผมเข้าใจว่ามันจะกลายเป็นข้อมูลประเภท text ไป
ถูกต้องหรือไม่ครับ
ขอบคุณมากครับ
        
    4 @R05727    
        
  
      เท่าที่อ่านน่าจะเป็นว่าคุณไปกำหนด Control Source ของเท็กส์บ็อกซ์เป็น =DLookup(...) ใช่ไหมครับ ถ้าใช่ จะบอกว่า Data Type ของเท็กส์บ็อกซ์นั้นมันก็ยังเป็นไปตามประเภทของฟิลด์ TextNum นั่นแหล่ะครับ เพียงแต่มันจัดชิดซ้ายเท่านั้นเอง ดังนั้นการจัดชิดซ้ายหรือขวา ไม่ได้เป็นตัวบ่งบอกว่ามันมี Data Type เป็นประเภทไหน    
    
  
        
    5 @R05733    
        
  
      ขอบคุณมากครับ    
    
  
        
    6 @R05740    
        
  
      พอดีเข้ามาอ่านหนะครับ... 
ตอนแรกก็เข้าใจเหมือนที่คุณสันติสุขชี้แจงว่าอาจจะเป็นการเขียนสูตรใน Text Box เลยทำให้คืนค่าค่ามาชิดซ้ายขวาตาม property ของ text box ...แต่ว่าผมได้ลองเขียน dlookup ใน query ดู ยังปรากฎว่าคืนค่าเป็น string อยู่
อีกทั้งได้ลอง make table แล้ว ไปเช็คดู property ของ Field มันกลายเป็น text ไปเลยหนะครับ ...ก็เลยเกิดความสงสัยขึ้นมา
อ้อลืมบอกไป โดยปกติวิธีการสังเกตุว่าข้อมูลที่แสดงอยู่เป็นตัวเลขหรือตัวอักษรให้ดูว่า ถ้าเป็นตัวเลขจะต้องชิดขวานะครับ ส่วนตัวอักษรจะชิดซ้าย
โดยเซลล์หรือฟิลด์นั้นจะต้องไม่ถูกจัด format ให้ชิดซ้ายหรือขวานะครับ
    
  ตอนแรกก็เข้าใจเหมือนที่คุณสันติสุขชี้แจงว่าอาจจะเป็นการเขียนสูตรใน Text Box เลยทำให้คืนค่าค่ามาชิดซ้ายขวาตาม property ของ text box ...แต่ว่าผมได้ลองเขียน dlookup ใน query ดู ยังปรากฎว่าคืนค่าเป็น string อยู่
อีกทั้งได้ลอง make table แล้ว ไปเช็คดู property ของ Field มันกลายเป็น text ไปเลยหนะครับ ...ก็เลยเกิดความสงสัยขึ้นมา
อ้อลืมบอกไป โดยปกติวิธีการสังเกตุว่าข้อมูลที่แสดงอยู่เป็นตัวเลขหรือตัวอักษรให้ดูว่า ถ้าเป็นตัวเลขจะต้องชิดขวานะครับ ส่วนตัวอักษรจะชิดซ้าย
โดยเซลล์หรือฟิลด์นั้นจะต้องไม่ถูกจัด format ให้ชิดซ้ายหรือขวานะครับ
        
    7 @R05742    
        
  
      ขอโทษนะครับ พิมพ์ผิดไป มันไปชิดซ้ายตะหาก แล้วพอไปกับอ้างอิงกับ ฟิลด์ที่เป็น ตัวเลข มันก็ฟ้องว่าเป็นคนประเภทกันครับ    
    
  
        
    8 @R05744    
        
  
      งานคอมพิวเตอร์เป็นงานที่ต้องมีเหตุผลพิสูจน์ได้แน่นอนเอามาเป็นเครื่องวัดนะ สำหรับผม ผมเช็คประเภทของข้อมูลด้วยฟังก์ชั่น VarType( ) ซึ่งผมเชื่อถือตรงนี้ครับ  ส่วนการชิดซ้าย/ขวา ซึ่งนั่นเป็นการจัดรูปแบบ ไม่ใช่สิ่งที่เป็นเครื่องพิสูจน์ว่ามันมี data type เป็นอะไร  สำหรับคุณ weezaa ที่บอกว่า "อ้างอิงกับฟิลด์ที่เป้นตัวเลข" ช่วยแสดงให้เห็นโค้ดหน่วยครับว่ามันอ้างอิงยังไง, แล้วฟิลด์ที่ว่านั้นมันมี data type เป็นอย่างไร, มี error ข้อความทั้งหมดว่าอย่างไร    
    
  
        
    9 @R05760    
        
  
      เรียน อ.สันติสุข
ผมทดลองทำ dlookup แบบไม่ซับซ้อนอะไร ถึงตัวเลขจะชิดซ้าย มันก็ยังเป็นตัวเลขอยู่ อย่างที่ อ. ว่า แต่สงสัย ผมทำ dlookup ซับซ้อนเกินไปหรือเปล่า จนค่ามันกลายเป็น text โดยผมทำแบบนี้ครับ
myPlace: Nz(DLookUp("[mth_No]","tbSchedule","[tmid] = '" & [tmID] & "' and [mth_Round]=" & [Mth_Round]+1 & " and [mth_A] ='" & [myCode] & "'"),0)
ขอบคุณมากครับ
    
  ผมทดลองทำ dlookup แบบไม่ซับซ้อนอะไร ถึงตัวเลขจะชิดซ้าย มันก็ยังเป็นตัวเลขอยู่ อย่างที่ อ. ว่า แต่สงสัย ผมทำ dlookup ซับซ้อนเกินไปหรือเปล่า จนค่ามันกลายเป็น text โดยผมทำแบบนี้ครับ
myPlace: Nz(DLookUp("[mth_No]","tbSchedule","[tmid] = '" & [tmID] & "' and [mth_Round]=" & [Mth_Round]+1 & " and [mth_A] ='" & [myCode] & "'"),0)
ขอบคุณมากครับ
        
    10 @R05764    
        
  
      ก็ต้องถามกลับว่า รู้ได้อย่างไรว่ามันกลายเป็น text ?    
    
  
        
    11 @R05778    
        
  
      ขอเพิ่มนิดนะครับ
อย่างที่ผมบอกไปตอนต้น ผมไปสร้าง field ใหม่ใน query โดยใช้สูตร GetID:dlookup("FieldNumber","teble1","ID = 1") แล้วสั่ง maketable
พอไปเช็ค Field GetID ดูปรากฎว่ามันกลายเป็น Text Size 255
ไม่แน่ใจว่ามันเกี่ยวกับอะไรเหมือนกันทำไมถึงแปลงจาก numeric เป็น text
    
  อย่างที่ผมบอกไปตอนต้น ผมไปสร้าง field ใหม่ใน query โดยใช้สูตร GetID:dlookup("FieldNumber","teble1","ID = 1") แล้วสั่ง maketable
พอไปเช็ค Field GetID ดูปรากฎว่ามันกลายเป็น Text Size 255
ไม่แน่ใจว่ามันเกี่ยวกับอะไรเหมือนกันทำไมถึงแปลงจาก numeric เป็น text
        
    12 @R05779    
        
  
      function ก็มี cDbl(),cLong(),Val() และอื่นอีกที่แปลงได้ครับ
ลองดู
    
  ลองดู
        
    13 @R05784    
        
  
      แม้ว่าผลของการสร้างเทเบิลด้วยการใช้ Make-Table query น่าจะ สะท้อน data type ของแต่ละคอลัมน์ในคิวรี่นั้น แต่ในกรณีที่เป็นผลของฟังก์ชั่น เช่น DLookUp(  ) เราไม่มีทางรู้ว่า Access มันไปทำอะไรบ้างในการพิจารณาว่าจะกำหนด data type ของฟิลด์ในเทเบิลที่กำลังจะสร้างใหม่เป็นประเภทอะไร อย่าว่าแต่ฟิลด์ที่เป็น numeric แล้วกลับถูกพิจารณาว่าให้มี data type สำหรับฟิลด์ในเทเบิลที่สร้างใหม่เป็นประเภท text เลย  ผมลองแม้แต่ใช้ฟิลด์ประเภท date/time มันก็ยังถูกพิจารณาว่าเป็น text เช่นกัน  หรือลองเอา expression นี้  Expr1: IIf(True,1,#1-Jan-2010#)  ใส่ลงคิวรี่แล้วลองสร้างเทเบิลใหม่ดู คุณอาจจะแปลกใจว่า Access ยังไงก็จะสร้าง data type สำหรับฟิลด์ในเทเบิลที่สร้างใหม่เป็น date/time อยู่ดี ทั้งๆที่ผลลัพธ์ของคิวรี่ไม่มีทางที่จะให้ค่าเป็นวันที่ 1-Jan-2010 เลย 
สรุปคือ เราจะใช้วิธีมอง data type ในเทเบิลที่สร้างจาก Make-Table query แล้วมาฟันธงว่า data type ของฟังก์ชั่นในคิวรี่นั้นเป็นประเภทเดียวกันนั้น ย่อมไม่ได้ ครับ
    
  สรุปคือ เราจะใช้วิธีมอง data type ในเทเบิลที่สร้างจาก Make-Table query แล้วมาฟันธงว่า data type ของฟังก์ชั่นในคิวรี่นั้นเป็นประเภทเดียวกันนั้น ย่อมไม่ได้ ครับ
        
    14 @R05785    
        
  
      โอเค ผมได้ข้อพิสูจน์แล้วว่า ผลของฟังก์ชั่น DLookup( ) ที่ใช้ในคิวรี่ จะให้ค่ากลับมาเป็น text แล้ว (ไม่แน่ใจว่าทุกกรณีหรือไม่ แต่เท่าที่ลองจะเป็นเช่นนั้น) โดยสั่งให้มีการกำหนด sort order สำหรับฟิลด์ DLookup( ) ไปด้วย  ถ้าผลเป็น numeric ค่าจะต้องเรียงแบบตัวเลข  แต่ผมได้ผลลัพธ์ว่า มันเรียงจาก 1000000, 123, ... (ตามข้อมูลทดสอบของผม) ดังนั้นจึงสรุปได้ตอนนี้ว่า มันให้ค่้าเป็น text
แต่ผมก็ยังยืนยันครับว่าโดยฟังก์ชั่นของ DLookup( ) เองแล้ว มันจะให้ data type เป็นอะไร ขึ้นกับ data type ของฟิลด์ที่เราไป lookup แต่สำหรับกรณีผลของคิวรี่นั้น ไม่เป็นอย่างนั้นครับ
    
  แต่ผมก็ยังยืนยันครับว่าโดยฟังก์ชั่นของ DLookup( ) เองแล้ว มันจะให้ data type เป็นอะไร ขึ้นกับ data type ของฟิลด์ที่เราไป lookup แต่สำหรับกรณีผลของคิวรี่นั้น ไม่เป็นอย่างนั้นครับ
        
    15 @R05788    
        
  
      ขอบคุณทุกท่าน ที่มีช่วยวิเคราะห์ให้ครับ    
    
  
        
    16 @R13858    
        
  
      รบกวนสอบ ปกติใช้ excel เขียน vlookup เป็น rang เช่น
score result
1 5
10 20
20 60
ถ้าใส่ค่า 3 จะได้ result เท่ากับ 5 หรือ ถ้าไส่ 17 ก็จะได้ 20
ถ้าเป็น MS Access ใน dlookup จะใช้อย่าไรครับ
    
  score result
1 5
10 20
20 60
ถ้าใส่ค่า 3 จะได้ result เท่ากับ 5 หรือ ถ้าไส่ 17 ก็จะได้ 20
ถ้าเป็น MS Access ใน dlookup จะใช้อย่าไรครับ
        
    17 @R13866    
        
  
      DLookup("result", "ชื่อเทเบิล","score = " & cstr(DMax("score","ชื่อเทเบิล","score <= " & cstr(ชื่อเท็กบ็อกซ์ที่ป้อนค่า 3))))    
    
  
        
    18 @R13869    
        
  
      ขอบคุณมากครับ คุณ สันติสุข แต่ผมส่งสัยว่าถ้าทำบน query จะใส่ค่าเป็นอย่างไรครับ
เช่น มี table (คือ table1) จะมีแค่ 1 field คือ score มีค่า 3 และ 15 จะต้องทำการ query 1 field โดยใส่ ค่าตามที่แนะนำมาจะต้องอย่างไร
DLookup("result", "ชื่อเทเบิล","score = " & cstr(DMax("score","ชื่อเทเบิล","score <= " & cstr(ชื่อเท็กบ็อกซ์ที่ป้อนค่า 3))))
ผมรบกวนด้วยครับ
    
  เช่น มี table (คือ table1) จะมีแค่ 1 field คือ score มีค่า 3 และ 15 จะต้องทำการ query 1 field โดยใส่ ค่าตามที่แนะนำมาจะต้องอย่างไร
DLookup("result", "ชื่อเทเบิล","score = " & cstr(DMax("score","ชื่อเทเบิล","score <= " & cstr(ชื่อเท็กบ็อกซ์ที่ป้อนค่า 3))))
ผมรบกวนด้วยครับ
        
    19 @R13870    
        
  
      ...จะมีแค่ 1 field คือ score มีค่า 3 และ 15 จะต้องทำการ query 1 field...
ไม่เข้าใจครับ
    
  ไม่เข้าใจครับ
        
    20 @R13876    
        
      
	  
      
    
      ขอโทษทีครับ ที่คำถามไม่ clear เช่น มี 2 table ดังนี้
table1 table2
Level Score Result name range score
TMR 0 U mr. a TMR 37
TMR 20 A MR.B STMR 90
TMR 35 S MR.C TMR 16
TMR 45 E MR.D STMR 75
STMR 0 U
STMR 40 A
STMR 80 S
STMR 120 E
โดยใช้การสร้าง query ที่ table2 ว่าถ้าจะทำ dlookup เพื่อหา Result ที่ table1 โดยมี 2 เงื่อนไข 2 อย่างคือเทียบ Rang กับ Level ใน table1 และหา Result ที่ table1 ว่าเป็นอย่างไร ถ้าตามข้อ 1 คือ mr. a ที่เป็น TMR จะได้ Result เท่ากับ S ไม่ทราบจะเขียน query อย่างไรครับ
    
  table1 table2
Level Score Result name range score
TMR 0 U mr. a TMR 37
TMR 20 A MR.B STMR 90
TMR 35 S MR.C TMR 16
TMR 45 E MR.D STMR 75
STMR 0 U
STMR 40 A
STMR 80 S
STMR 120 E
โดยใช้การสร้าง query ที่ table2 ว่าถ้าจะทำ dlookup เพื่อหา Result ที่ table1 โดยมี 2 เงื่อนไข 2 อย่างคือเทียบ Rang กับ Level ใน table1 และหา Result ที่ table1 ว่าเป็นอย่างไร ถ้าตามข้อ 1 คือ mr. a ที่เป็น TMR จะได้ Result เท่ากับ S ไม่ทราบจะเขียน query อย่างไรครับ
      Time: 0.0659s
    
      
		