reading tile-data from mbtiles generates "RangeError: Error #2006: The supplied index is out of bounds." - sqlite

I am trying to read imagedata from a sqlite database ( it is a mbtiles map tiles file )
for that i tried to convert this php code
$sql = "SELECT * FROM tiles WHERE zoom_level = $zoom AND tile_column = $column AND tile_row = $row";
$q = $conn->prepare($sql);
$q->execute();
$q->bindColumn(1, $zoom_level);
$q->bindColumn(2, $tile_column);
$q->bindColumn(3, $tile_row);
$q->bindColumn(4, $tile_data, PDO::PARAM_LOB);
while($q->fetch())
{
header("Content-Type: image/png");
echo $tile_data;
}
to as3 using
_conn = new SQLConnection();
_conn.addEventListener(SQLEvent.OPEN, openHandler);
_conn.addEventListener(SQLErrorEvent.ERROR, errorHandler);
var folder:File = File.applicationDirectory;
var dbFile:File = folder.resolvePath("test.mbtiles");
_conn.openAsync(dbFile, SQLMode.READ);
function openHandler(event:SQLEvent):void
{
trace("db opened");
var selectStmt:SQLStatement = new SQLStatement();
selectStmt.sqlConnection = _conn;
selectStmt.text = "SELECT * FROM tiles WHERE zoom_level = 5 AND tile_column = 17 AND tile_row = 20";
selectStmt.execute();
}
but i am getting "RangeError: Error #2006: The supplied index is out of bounds."
Any ideas on how to solve this?
Thanks!

aha, nerver mind.
query should be
"SELECT CAST(tile_data AS ByteArray) as data " +
"FROM tiles WHERE " +
"zoom_level = 5 " +
"and tile_column = 17 " +
"and tile_row = 20";

Related

ASP.net Chart Vertical Line for Date which is on X Axis

I have implemented a RangeBar for a Gantt style chart with data from SQL Server:
mySelectQuery = "SELECT [DateTime] as StartDate, DATEADD(Day, [Time], [DateTime]) as EndDate, [Type] FROM [TaskTrack] WHERE [User] = '" + User.Identity.Name + "' AND DATEADD(Day, [Time], [DateTime]) >= getdate() ORDER BY [DateTime]";
string connStr = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
SqlConnection conn = new SqlConnection(connStr);
DataSet ds = new DataSet();
dynamic adapter = new SqlDataAdapter(mySelectQuery, conn);
conn.Open();
adapter.Fill(ds);
Chart1.DataSource = ds;
Chart1.Series["Series1"].ChartType = System.Web.UI.DataVisualization.Charting.SeriesChartType.RangeBar;
Chart1.Series["Series1"].Label = "";
Chart1.Series["Series1"].XValueMember = "Type";
Chart1.Series["Series1"].YValueMembers = "StartDate,EndDate";
Chart1.Series["Series1"].ToolTip = "#VALY : #VALX";
Chart1.Series["Series1"].SmartLabelStyle.Enabled = true;
Chart1.ChartAreas["ChartArea1"].AxisX.LabelStyle.Enabled = false;
Chart1.ChartAreas["ChartArea1"].AxisX.MajorGrid.Enabled = false;
Chart1.ChartAreas["ChartArea1"].AxisY.MajorGrid.Enabled = false;
Chart1.DataBind();
conn.Close();
This works really well but along the X Axis are dates and I would like to have a vertical red line pointing up to denote todays date so that when looking at the chart it gives a good indication of when today is and what is to be done for the future.
Does anyone have an example of how to do this?
So if anyone is getting this issue in the future, I found a solution that works for me:
mySelectQuery = "SELECT [DateTime] as StartDate, DATEADD(Day, [Time], [DateTime]) as EndDate, [Type] FROM [TaskTrack] WHERE [User] = '" + User.Identity.Name + "' AND DATEADD(Day, [Time], [DateTime]) >= getdate() ORDER BY [DateTime]";
string connStr = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
SqlConnection conn = new SqlConnection(connStr);
DataSet ds = new DataSet();
dynamic adapter = new SqlDataAdapter(mySelectQuery, conn);
conn.Open();
adapter.Fill(ds);
Chart1.DataSource = ds;
Chart1.Series["Series1"].ChartType = System.Web.UI.DataVisualization.Charting.SeriesChartType.RangeBar;
Chart1.Series["Series1"].Label = "";
Chart1.Series["Series1"].XValueMember = "Type";
Chart1.Series["Series1"].YValueMembers = "StartDate,EndDate";
Chart1.Series["Series1"].ToolTip = "#VALY : #VALX";
Chart1.Series["Series1"].SmartLabelStyle.Enabled = true;
Chart1.ChartAreas["ChartArea1"].AxisX.LabelStyle.Enabled = false;
Chart1.ChartAreas["ChartArea1"].AxisX.MajorGrid.Enabled = false;
Chart1.ChartAreas["ChartArea1"].AxisY.MajorGrid.Enabled = false;
VerticalLineAnnotation VA;
ChartArea CA;
CA = Chart1.ChartAreas[0];
VA = new VerticalLineAnnotation();
VA.AxisX = CA.AxisX;
VA.AxisY = CA.AxisY;
VA.IsInfinitive = true;
VA.ClipToChartArea = CA.Name;
VA.Name = "myLine";
VA.ToolTip = DateTime.Now.ToString("dd-MM-yyyy");
VA.Height = CA.AxisY.Maximum - CA.AxisY.Maximum;
VA.IsInfinitive = true;
VA.ClipToChartArea = CA.Name;
VA.LineColor = Color.Red;
VA.LineWidth = 2; // use your numbers!
VA.X = DateTime.ParseExact(DateTime.Now.ToString("dd-MM-yyyy"), "dd-MM-yyyy", null).ToOADate();
Chart1.Annotations.Add(VA);
Chart1.DataBind();
conn.Close();

What is ZRangeValid means

This code is to read an excel file, what is ZRangeValid means and what is rs.fields(0).value referring to? Please explain my two questions
var strConnString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strXLPath + ";Extended Properties=\"Excel 12.0;HDR=YES;\";";
var conn = new ActiveXObject("ADODB.Connection");
conn.open(strConnString, "", "");
var rs = new ActiveXObject("ADODB.Recordset");
var rsrowCount = new ActiveXObject("ADODB.Recordset");
rs = conn.execute("select * from ZRangeValid");
if (rs.fields(0).value != 'YES') {
alert(strXLPath + " requested numbers spreadsheet is not valid.\nPlease validate the spreadsheet data and retry.")
rs = null;
rsSheet = null;
conn.close();
conn = null;
return false
}

Validate last 2 letters into dynamic query

Im doing a Dynamic Query into ASP.NET using SQL Server 2016.
Basically i have some checkbox and textbox:
<asp:CheckBox ID="chk_Precio" runat="server" OnCheckedChanged="chk_Precio_CheckedChanged" AutoPostBack="true" />
<asp:TextBox ID="txtPrecio" runat="server" CssClass="enjoy-css" style="margin-bottom: 0"></asp:TextBox>
<asp:CheckBox ID="chk_Modelo" runat="server" AutoPostBack="true" OnCheckedChanged="chk_Modelo_CheckedChanged" />
<asp:TextBox ID="txtModelo" runat="server" CssClass="enjoy-css" style="margin-bottom: 0"></asp:TextBox>
<asp:Button ID="btnBuscar" CssClass="button" runat="server" Text="Buscar" OnClick="btnBuscar_Click" />
These are validated in chk_Modelo_CheckedChanged.
Inside btnBuscar_Click i have:
protected void btnBuscar_Click(object sender, EventArgs e)
{
string query = "SELECT p.OrderId AS Orden, p.OrderDate as Fechadecompra, '$'+Convert(varchar,convert(money,p.Amount),1) as PrecioCompra, c.ModelCar as Modelo, b.Description_Brand as Marca, c.Color, t.Description_Transmision as Transmision, s.StatusName AS Estado FROM PurchaseOrder AS p INNER JOIN Cars AS c ON p.IdCar = c.IdCar INNER JOIN Brand AS b ON c.IdBrand = b.IdBrand INNER JOIN TransmisionType AS t ON c.IdTransmision = t.IdTransmision INNER JOIN Status AS s on c.IdStatus = s.IdStatus where ";
string varprecio = txtPrecio.Text;
string varModelo = txtModelo.Text;
try
{
if (varprecio != "")
{
query += "(p.Amount = '"+varprecio +"') or";
}
else if(varModelo != "")
{
query += "(c.ModelCar = '"+varModelo +"') or";
}
string str = "Data Source=DESKTOP-77G5EDB\\SQLEXPRESS;Initial Catalog=TallerDB;Integrated Security=True";
SqlConnection sqlConnection = new SqlConnection(str);
SqlCommand cmd = new SqlCommand(query, sqlConnection);
sqlConnection.Open();
SqlDataReader dr = cmd.ExecuteReader();
dtgv_Compras.DataSource = dr;
dtgv_Compras.DataBind();
}
catch (Exception ex)
{
Response.Write("<script>alert('ERROR: " + ex.Message + "')</script>");
}
}
My question is:
How can i validate if my query ends with: OR, delete these OR and my query finish correctly.
query += "(p.Amount = '"+varprecio +"') or";
F.E.:
SELECT p.OrderId AS Orden, p.OrderDate as Fechadecompra, '$'+Convert(varchar,convert(money,p.Amount),1) as PrecioCompra, c.ModelCar as Modelo, b.Description_Brand as Marca, c.Color, t.Description_Transmision as Transmision, s.StatusName AS Estado
FROM PurchaseOrder AS p
INNER JOIN Cars AS c ON p.IdCar = c.IdCar
INNER JOIN Brand AS b ON c.IdBrand = b.IdBrand
INNER JOIN TransmisionType AS t ON c.IdTransmision = t.IdTransmision
INNER JOIN Status AS s on c.IdStatus = s.IdStatus where (p.Amount = '5000')
Thanks in advance
I made some changes in your button click.
protected void btnBuscar_Click(object sender, EventArgs e)
{
string query = "SELECT p.OrderId AS Orden, p.OrderDate as Fechadecompra, '$'+Convert(varchar,convert(money,p.Amount),1) as PrecioCompra, c.ModelCar as Modelo, b.Description_Brand as Marca, c.Color, t.Description_Transmision as Transmision, s.StatusName AS Estado FROM PurchaseOrder AS p INNER JOIN Cars AS c ON p.IdCar = c.IdCar INNER JOIN Brand AS b ON c.IdBrand = b.IdBrand INNER JOIN TransmisionType AS t ON c.IdTransmision = t.IdTransmision INNER JOIN Status AS s on c.IdStatus = s.IdStatus ";
string varprecio = txtPrecio.Text;
string varModelo = txtModelo.Text;
try
{
if (varprecio != "" || varModelo != "")
query += "where ";
if (varprecio != "")
{
query += "(p.Amount = '" + varprecio + "')";
if (varModelo != "")
query += " or ";
}
if (varModelo != "")
{
query += "(c.ModelCar = '" + varModelo + "')";
}
string str = "Data Source=DESKTOP-77G5EDB\\SQLEXPRESS;Initial Catalog=TallerDB;Integrated Security=True";
SqlConnection sqlConnection = new SqlConnection(str);
SqlCommand cmd = new SqlCommand(query, sqlConnection);
sqlConnection.Open();
SqlDataReader dr = cmd.ExecuteReader();
dtgv_Compras.DataSource = dr;
dtgv_Compras.DataBind();
}
catch (Exception ex)
{
Response.Write("<script>alert('ERROR: " + ex.Message + "')</script>");
}
}
Hope this will work for you. Please let me know if you will still facing issue.
Try this so you don't have to check whether they are blank or not
query += "('" + varprecio +"' = '''' or p.Amount = '" + varprecio +"') AND"
query += "('" + varModelo +"' = '''' or c.ModelCar = '"+varModelo +"')";
Which will give you
WHERE ('' = '' OR p.amount = '') AND ('' = '' or c.ModelCar = '')
or
WHERE ('abc' = '' OR p.amount = 'abc') AND ('xyz' = '' or c.ModelCar = 'xyz')
so if they are blank they are ignored on the SQL side.
I was trying in my work with oracle and i found this:
SELECT SUBSTR('select * from table where condicion = value or', 1, (LENGTH('select * from table where condicion = value or') - 2))
FROM dual where (SUBSTR ('select * from table where condicion = value or', -2,LENGTH('select * from table where condicion = value or')) = 'or');
Query:
select * from table where condicion = value or
Result:
I'll convert later to transact-sql in case someone uses the code into oracle.

Could not parse query

I have tried rewriting this query a few different ways, but with no luck. Help here is much appreciated.
function createWaterBodyDropDown(region) {
var query = "SELECT 'LAKE_NAME' FROM 1IfQgRAeKPbVJwEpAnqqpYlN8sgiPMg1VQ_RyArI WHERE 'REGION'=" + '"' + region + '"';
var queryText = encodeURIComponent(query);
var gvizQuery = new google.visualization.Query(
'http://www.google.com/fusiontables/gvizdata?tq=' + queryText);
//Send query and draw table with data in response
gvizQuery.send(function (response) {
var str;
var numRows = response.getDataTable().getNumberOfRows();
var numCols = response.getDataTable().getNumberOfColumns();
var name = [
'<label style="font-weight:bolder;font-size:16px">Water body: </label>' + '<select id="waterbody_menu" style="font-size:16px;" onchange="select_waterBody(this.options[this.selectedIndex].value);">' + '<option value="">--All--</option>'
];
for (var i = 0; i < numRows; i++) {
var val = response.getDataTable().getValue(i, 0);
name.push("<option value=" + "'" + val + "'" + ">" + val + "</option>");
}
name.push('</select>');
document.getElementById('waterBody_container').innerHTML = name.join('');
});
}
Your column names have no special characters so they don't need to be quoted, though they could be (with single quotes). String values must be quoted with single quotes. See the reference manual for more details.
So:
SELECT LAKE_NAME FROM 1IfQgRAeKPbVJwEpAnqqpYlN8sgiPMg1VQ_RyArI WHERE REGION = 'foobar'

Load SQLite query results into textarea in same View

How can you place results from a SQLite query into a textarea?
The idea is that the user presses the 'next' button and then the textarea displays the text for the next text value in the next record. I believe that I'm passing the values correctly, but when I use trace(), the values come up as undefined.
What am I doing wrong?
protected function button6_clickHandler(event:MouseEvent):void // pushed --> button
{
var cardNumber:int = parseInt(cardNumberLabel.text);
var newcardid:int = cardNumber+1;
var sqlresult:SQLResult = stmt.getResult();
stmt.sqlConnection = conn;
conn.open(File.applicationStorageDirectory.resolvePath("FlashCards.db"));
stmt.text = "SELECT * FROM cardItems WHERE id = ?";
stmt.parameters[0] = newcardid;
stmt.execute();
trace(sqlresult.data); // value = [object Object]
stext1.text = sqlresult.data.cSide1;
trace(sqlresult.data.cSide1); // value = 'undefined'
cardNumberLabel.text = sqlresult.data.id;
trace(sqlresult.data.id); // value = 'undefined'
conn.close();
moveEffectRPart1.play();
moveEffectRPart1.addEventListener(EffectEvent.EFFECT_END, nextMoveRPart);
}
EDIT: WORKING CODE*
private function nextMoveRPart(event:EffectEvent):void
{
var cardNumber:int = parseInt(cardNumberLabel.text);
stmt.sqlConnection = conn;
conn.open(File.applicationStorageDirectory.resolvePath("FlashCards.db"));
stmt.text = "SELECT * FROM cardItems WHERE id = ?" + "AND id <= MAX(id)";
stmt.parameters[0] = cardNumber+1;
stmt.addEventListener(SQLEvent.RESULT, resultHandlerPrev);
stmt.execute();
conn.close();
moveEffectRPart2.play();
}
function resultHandlerNext(event:SQLEvent):void // result handler next
{
var result:SQLResult = stmt.getResult();
var numResults:int = result.data.length;
for(var i:int = 0; i < numResults; i++)
{
var row:Object = result.data[i];
stext1.text = row.cSide1;
stext2.text = row.cSide2;
cardNumberLabel.text = row.id;
}
}

Resources