MapXtreme: Too Many Constants in Subexpressions (Maximum is 255)

Beberapa waktu lalu, Mas Ndereklangkung mengalami error ini ketika membuat aplikasi mapxtreme. Dia mencoba melakukan query untuk mencari objek peta. Parameter yang digunakan diambil dari database, diubah jadi string dan dimasukkan dalam query mapinfo
“Select * from Jabodetabek_Sales_Customers where acc_id in (” & xx & “)”
Namun malah muncul error “Unable to parse statement: Select * from Jabodetabek_Sales_Customers where acc_id in (‘5300027541′,’5300058807′,’5300062475′,’…’). Too Many Constants in Subexpressions (Maximum is 255). Ternyata query ‘IN’ di mapinfo hanya mampu menerima 255 parameter. Lebih dari itu akan muncul error

Salah satu cara mengatasi ini adalah memecah queri menjadi beberapa bagian. String parameter yang akan digunakan dalam query, (di contoh ini diambil dari database), kita simpan dalam StringCollection untuk memudahkan mengetahui jumlah parameter dan memisahkannya. xx adalah variabel stringCollection yang akan digunakan.

Dim conn As SqlClient.SqlConnection = New SqlClient.SqlConnection(strDbconnection)
Dim cmd As SqlClient.SqlCommand 
Dim dr As SqlClient.SqlDataReader
cmd = New SqlClient.SqlCommand(Query, conn)
conn.Open()
dr = cmd.ExecuteReader()

Dim xx As New StringCollection
While dr.Read()
    If Not dr(0) Is DBNull.Value Then
	    xx.Add(dr(0).ToString())
	End If
End While
conn.Close()

Setelah parameter diperoleh, kita pecah tiap 255. Kita lakukan looping, karena kita tidak tahu berapa jumlah string yang ada dalam collection,

Dim sb As StringBuilder
Dim connR As New MapInfo.Data.MIConnection()
connR.Open()
Dim com As MapInfo.Data.MICommand
Dim irsfc As MapInfo.Data.IResultSetFeatureCollection
For i As Integer = 0 To xx.Count - 1 Step 255
	'buat string parameter untuk queri mapinfo tiap 254 string disini
	sb = New StringBuilder
	For j As Integer = i To i + 254
		If j < xx.Count Then
			sb.Append(xx(j) & ",")
		End If
	Next
	'parameter sbtostring udah dapat
	'lakukan kueri mapinfo disini
	com = New MapInfo.Data.MICommand
	com.connection = connR
	com.CommandText = "Select * from Jabodetabek_Sales_Customers where acc_id in (" & sb.ToString() & ")"
	irsfc = com.ExecuteFeatureCollection(irsfc, ResultSetCombineMode.AddTo)
Next

Contoh diatas akan melakukan looping tiap 255 data, dan melakukan query sebanyak looping yand dilakukan dan hasilnya dikumpulkan di IResultSetFeatureCollection.

Semoga bermanfaat. Happy coding.

About Yuniar

Penulis sekarang lebih banyak bekerja menggunakan teknologi Microsoft .NET secara umum dan TIDAK lagi menggunakan aplikasi MapXtreme.net dari MapInfo. Karena itu mohon maaf, jika pertanyaan-pertanyaan mengenai MapXtreme sudah tidak bisa saya jawab lagi.

Posted on 20 Juli 2011, in MapXtreme and tagged , , , . Bookmark the permalink. Tinggalkan komentar.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: