Sqlsrv query při Insertu rozdělení datetime v SQLbuilder

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
kralik
Člen | 230
+
0
-

Ahoj,
narazil jsem na takový pro mě zatím zvlášní případ.
Používám NetteDatabase s ovladačem Sqlsrv pro MS SQL, verzi Nette 2.2.10 i 2.3.10
Při požadavku na insert hodnot mi pravděpodobně SQLbuilder vytvoří hromadnou insert query s rozděleným datetime, resp. někde je datetime rozdělen někde ne, asi záleží jak se vejde.

Vygenerovaná sql query

  • sloupců je v db více, omezil jsem je zde kvůli přehlednosti
<?php
INSERT INTO [FinalEV] ([A], [B], [DateCreated], [Exported])
VALUES ('RKU', 'CUF', '2016-06-09
20:03:28', 0)
,('JSP', 'HAR', '2016-06-09
20:03:28', 0)
,('JCE','ADD', '2016-06-09
20:03:28', 0)
,('JSP', 'HAR', '2016-06-09
20:03:28', 0)
?>

→ Tato query hlásí chybu:
SQLSTATE[42000]: [Microsoft][SQL Server Native Client 11.0][SQL Server]Error converting data type varchar to numeric

Správně má být

<?php
INSERT INTO [FinalEV] ([A], [B], [DateCreated], [Exported])
VALUES ('RKU', 'CUF', '2016-06-09 20:03:28', 0)
,('JSP', 'HAR', '2016-06-09 20:03:28', 0)
,('JCE','ADD', '2016-06-09 20:03:28', 0)
,('JSP', 'HAR', '2016-06-09 20:03:28', 0)
?>

→ Tato query bez problémy projde

Prosím věděl byste mi někdo poradit co s tím?
Setkal jste se někdo s podobným případem?

Moc dík

CZechBoY
Člen | 3608
+
0
-

tzn. vkládat místo nového řádku pouze mezeru?
Proč nepoužíváš MsSql driver? Ten odděluje právě mezerou.

Editoval CZechBoY (10. 6. 2016 9:55)

kralik
Člen | 230
+
0
-

CZechBoY napsal(a):

tzn. vkládat místo nového řádku pouze mezeru?
Proč nepoužíváš MsSql driver? Ten odděluje právě mezerou.

Nechápu otázku ohledně vkládání mezery.
Insert mám takto:

$datD je klasické pole.
array (205)
0 ⇒ array (23)
A ⇒ „PMI“ (3)
B ⇒ „COM“ (3)
DateCreated ⇒ „2016–06–10 10:07:34“ (19)
Exported ⇒ 0

V poli u hodnot tedy žádné rozdělení není.

<?php
$this->connection->table('FinalTF')->insert($datD);
?>

Nevím proč mi data rozdělí NetteDatabase…?

mssqldriver se mi pod windows php nepodařilo rozjet a také je sqldriver novější pro php pod windows.

Díky

CZechBoY
Člen | 3608
+
0
-

No, že jedinej rozdíl v dotazech je mezera vs nový řádek u hodnoty času.
To právě dělá ten SqlsrvDriver https://api.nette.org/…ver.php.html#…

kralik
Člen | 230
+
0
-

CZechBoY napsal(a):

No, že jedinej rozdíl v dotazech je mezera vs nový řádek u hodnoty času.
To právě dělá ten SqlsrvDriver https://api.nette.org/…ver.php.html#…

Mám v obou ovladačích (SqlsrvDriver i MsSqlDriver) následující

<?php
public function formatDateTime(/*\DateTimeInterface*/ $value)
	{
		/** @see https://msdn.microsoft.com/en-us/library/ms187819.aspx */
		return $value->format("'Y-m-d H:i:s'");
	}
?>

Změnil jsem to na:

<?php
public function formatDateTime(/*\DateTimeInterface*/ $value)
	{
		/** @see https://msdn.microsoft.com/en-us/library/ms187819.aspx */
		return $value->format("'Y-m-d\\TH:i:s'");
	}
?>

Změnil jsem formát dle verze 2.4 v SqlsrvDriver a chyba se objevuje stále.
Pořád dochází k rozdělení času od datumu.

Mooc díky