conexiune deschisa si Excel

Am avut de facut o aplicatie care sa tipareasca automat niste rezultate care provin de la o niste rinduri de Excel, trecute printr-o functie dintr=o BD SQL Server.
Normal  ca am facut o functie in VBA care sa faca asta:
Public Function valoarescan(val)
    If (Len(val) = 0) Then Exit Function
    Dim t As Range
    Set t = val
   
   Dim rs As ADODB.Recordset
   Dim cn As ADODB.Connection
   Set cn = New ADODB.Connection
   cn.ConnectionString = “Driver={SQL Server};Server=(local);Database=….;Trusted_Connection=Yes;”
   cn.Open
    Set rs = cn.Execute(“SELECT [user].[functie] (‘” & t.Text & “‘)”)
   
    valoarescan = rs(0).Value
    cn.Close
    ‘MsgBox Len(valoarescan)
   
   
End Function
Ceea ce am observat este ca dura mult prea mult(2 minute) pentru 31 de rinduri, asa incit ceea ce am facut este sa nu mai respect BestPractices pentru o conexiune, ci sa folosesc aceeasi conexiune
Dim cn As ADODB.Connection
Public Function valoarescan(val)
    If (Len(val) = 0) Then Exit Function
    Dim t As Range
    Set t = val
   
   Dim rs As ADODB.Recordset
   Dim cn As ADODB.Connection
   If (cn Is Nothing) Then
   cn.ConnectionString = “Driver={SQL Server};Server=(local);Database=….;Trusted_Connection=Yes;”
   cn.Open
    End If
    Set rs = cn.Execute(“SELECT [user].[functie] (‘” & t.Text & “‘)”)
   
    valoarescan = rs(0).Value

    ‘MsgBox Len(valoarescan)
   
   
End Function

Rezultat: merge in aprox 2 secunde !
Drawback: Conexiunea nu se inchide… – pentru ca nu stiu care e ultima oara cind se apeleaza…

As putea sa fac o clasa care sa refoloseasca conexiunea – si pe Terminate sa o distruga… dar am fost bucuros ca mi-a dat…

Concluzia : Citeodata e bine sa nu respecti bestpractices!

14 Surefire Ways to Annoy Users

De la The 20 Most Annoying Tech Products
citeva sugestii despre cum sa faci programe fara succes:

  1. Force us to reboot our systems any time we install or uninstall your product.
  2. Automatically install into the Windows system tray and launch at startup.
  3. Force us to read the manual just to figure out how to turn on the damned thing.
  4. Pop up little reminders for things we don’t want to do.
  5. Make tech-support contact information nearly impossible to find–or, better yet, don’t include any.
  6. Install a bunch of extra software nobody asked for or wants.
  7. Automatically sign us up for e-mail newsletters and other announcements.
  8. Charge us $35 per call to speak to “Bob” in Bangalore when we have problems.
  9. Force us to upgrade products to get the same functionality we already had in the old version.
  10. Make us enter the same information (like e-mail addresses) multiple times.
  11. Require
    us to retype squiggly letters that are virtually impossible for humans
    to decipher when signing up for new accounts. (Note to Microsoft: This
    means you.)
  12. Force us to register products and/or nag us until we capitulate.
  13. Promise to remember our log-ins and password, yet still make us enter them every time.
  14. Insist on updating the product when all we want to do is quit it and go home.

dilema veche si MUNCITORI FĂRĂ FRONTIERE

Cam dezamagitoare- dar , in definitiv, si eu NU am scris despre experienta mea cu plecatul in calitate de inchiriat al unor companii de IT.
Andrei Plesu scrie un articol bunut despre Jung – dar eu ma intreb acum, ca si atunci cind am citit despre carabus: chiar exista o inteligenta superioara care vrea sa aranjeze lucrurile?Sau gasim noi aranjamente unde nu sunt ? Oricum, il sfatuiesc sa citeasca articolul lui Sever Voinescu

Articole bune de citit:

Mircea VASILESCU | Europa dumitale
Nu suspendăm preşedintele. Amînăm Crăciunul

Cristian GHINEA | cetatea de scaune
Cum ne apucă greşit mîndria naţională

Cătălin GHIŢĂ
Mita ca reflex al unui popor colonizat

Ieri a fost ziua mea

Felicitari de la companii si prieteni, si 2 de la servici.
Altfel- frumos.O s-a straduit pentru seara – si am facut acasa o cina cu prietenii ca in 90 si ceva…
Dragut… dar a mai trecut 1 an

blog-uri si drepturi de autor

pentru cei (din Bucuresti  – si nu numai, daca au timp ) interesati sa participe Joi, 19 aprilie 2007, aveti un link aici
http://legi-internet.ro/blogs/index.php?title=despre_bloguri_si_drept_de_autor_ce_este&more=1&c=1&tb=1&pb=1

PROGRAMAREA IN .NET – PARTEA A 15-A OPERATII ASINCRONE IN ASP.NET SI AJAX

Modelul asincron din ASP.NET

 

 

 

Sa discutam despre operatii asincrone in ASP.NET.

Exista doua tipuri mari de operatii operatii asincrone

1. Cele care se executa doar
pentru operatii lungi , care iau ceva timp de executie, si pentru care user-ul
trebuie instiintat de evolutia lor.

2. Cele care trimit rapid o
cerere la server si se intorc.

 

Pentru 1.,o solutie recomandata este sa puneti Async=true in
codul de pagina si sa executati codul cu RegisterTaskAsync . Asta este
interesant, pina cind ne dam seama ca modul de afisare al paginii este acelasi
– adica este intirziata pina cind se termina toata de executat.

 

Un exemplu bun gasiti aici

http://msdn.microsoft.com/msdnmag/issues/05/10/WickedCode/#S5

si aici

http://msdn.microsoft.com/msdnmag/issues/07/03/WickedCode/default.aspx

 

Totusi, as recomanda o alta abordare – pentru ca user-ul sa
„vada” desfasurarea detaliata a actiunilor efectuate, as recomanda scrierea cu
Response.Write intr-un div si ascunderea apoi a div-ului .

Ceva de genul acesta:

 

Pe pagina aspx, printre ultimele linii, ascunderea div-ului
cu mesaje:

<script>

var mesaje =
document.getElementById(‘mesaje’);

if(mesaje != null)

mesaje.style.display = ‘none’;

</script>

 

In codul paginii aspx putem pune cod de genul urmator:

Response.Write(“<div
id=’mesaje’>”
);

Response.Write(“Begin :” + DateTime.Now.ToString(“yyyy MMM dd hh:mm:ss”) + “<BR>”);


Response.Flush();

//executare prim task

Response.Write(“Generated
prim task<BR>”
);

Response.Flush();

//executare al doilea task

Response.Write(“Generated
al doilea task<BR>”
);

Response.Flush();

//incheiere procedura…

Response.Write(“</div>”);

Response.Flush();

 

 

Acest model se poate combina cu evenimente generate in
cadrul task-ruilor astfel incit, daca task-urile dureaza prea mult, user-ul sa
aiba totusi un feedback despre ceea ce se intimpla.

 

Sa discutam acum despre 2, executarea de operatii rapide pe
server. Sa dam un exemplu simplu, si anume cautarea de publisher dupa nume. Ar
fi superb daca aplicatia noastra, la apasarea primei litere a publisher-ului,
ar putea sa sugereze publisher-ii care incep cu litera respectiva.

Pentru aceasta vom folosi Ajax,
si vom folosi implementarea de AutoComplete
de la Ajax
Control Toolkit

Mai intii ,trebuie sa downloadam Ajax1.0 de aici.

 

Apoi va trebui sa modificam Web.Config astfel incit sa
suporte Ajax.

Asta inseamna ca o sa luam o mare parte din Web.Config-ul
unui site Ajax si o sa il mutam la noi in site.

Sa incepem :

De la o configuration o sa luam

<configSections>

<sectionGroup name=“system.web.extensions“ type=“System.Web.Configuration.SystemWebExtensionsSectionGroup,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
“>

<sectionGroup name=“scripting“ type=“System.Web.Configuration.ScriptingSectionGroup,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35
“>

<section name=“scriptResourceHandler“ type=“System.Web.Configuration.ScriptingScriptResourceHandlerSection,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35
“ requirePermission=“false“ allowDefinition=“MachineToApplication“/>

<sectionGroup name=“webServices“ type=“System.Web.Configuration.ScriptingWebServicesSectionGroup,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35
“>

<section name=“jsonSerialization“ type=“System.Web.Configuration.ScriptingJsonSerializationSection,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35
“ requirePermission=“false“ allowDefinition=“Everywhere“/>

<section name=“profileService“ type=“System.Web.Configuration.ScriptingProfileServiceSection,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35
“ requirePermission=“false“ allowDefinition=“MachineToApplication“/>

<section name=“authenticationService“ type=“System.Web.Configuration.ScriptingAuthenticationServiceSection,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35
“ requirePermission=“false“ allowDefinition=“MachineToApplication“/>

</sectionGroup>

</sectionGroup>

</sectionGroup>

</configSections>

 

De la system.web o sa luam

<pages>

<controls>

<add tagPrefix=“asp“ namespace=“System.Web.UI“ assembly=“System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35
“/>

</controls>

</pages>

Si

<compilation debug=“false“>

<assemblies>

<add assembly=“System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35
“/>

<add assembly=“System.Design, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=B03F5F7F11D50A3A
“/>

<add assembly=“System.Web.Extensions.Design, Version=1.0.61025.0,
Culture=neutral, PublicKeyToken=31BF3856AD364E35
“/></assemblies>

</compilation>

 

Apoi Handler-e si Module:

<httpHandlers>

<remove verb=“*“ path=“*.asmx“/>

<add verb=“*“ path=“*.asmx“ validate=“false“ type=“System.Web.Script.Services.ScriptHandlerFactory,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35
“/>

<add verb=“*“ path=“*_AppService.axd“ validate=“false“ type=“System.Web.Script.Services.ScriptHandlerFactory,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35
“/>

<add verb=“GET,HEAD“ path=“ScriptResource.axd“ type=“System.Web.Handlers.ScriptResourceHandler,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35
“ validate=“false“/>

</httpHandlers>

<httpModules>

<add name=“ScriptModule“ type=“System.Web.Handlers.ScriptModule, System.Web.Extensions,
Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
“/>

</httpModules>

Apoi extensions si WebServer:

<system.web.extensions>

<scripting>

<webServices>

<!– Uncomment this
line to customize maxJsonLength and add a custom converter
–>

<!–

<jsonSerialization maxJsonLength=”500″>

<converters>

<add
name=”ConvertMe”
type=”Acme.SubAcme.ConvertMeTypeConverter”/>

</converters>

</jsonSerialization>

–>

<!– Uncomment this
line to enable the authentication service. Include requireSSL=”true”
if appropriate.
–>

<!–

<authenticationService
enabled=”true” requireSSL = “true|false”/>

–>

<!– Uncomment these
lines to enable the profile service. To allow profile properties to be
retrieved

and modified in ASP.NET AJAX
applications, you need to add each property name to the readAccessProperties
and

writeAccessProperties
attributes.
–>

<!–

<profileService
enabled=”true”


readAccessProperties=”propertyname1,propertyname2″


writeAccessProperties=”propertyname1,propertyname2″ />

–>

</webServices>

<!–

<scriptResourceHandler
enableCompression=”true” enableCaching=”true” />

–>

</scripting>

</system.web.extensions>

<system.webServer>

<validation validateIntegratedModeConfiguration=“false“/>

<modules>

<add name=“ScriptModule“ preCondition=“integratedMode“ type=“System.Web.Handlers.ScriptModule, System.Web.Extensions,
Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
“/>

</modules>

<handlers>

<remove name=“WebServiceHandlerFactory-Integrated“/>

<add name=“ScriptHandlerFactory“ verb=“*“ path=“*.asmx“ preCondition=“integratedMode“ type=“System.Web.Script.Services.ScriptHandlerFactory,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35
“/>

<add name=“ScriptHandlerFactoryAppServices“ verb=“*“ path=“*_AppService.axd“ preCondition=“integratedMode“ type=“System.Web.Script.Services.ScriptHandlerFactory,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35
“/>

<add name=“ScriptResource“ preCondition=“integratedMode“ verb=“GET,HEAD“ path=“ScriptResource.axd“ type=“System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions,
Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
“/>

</handlers>

</system.webServer>

 

Acum downloadam Ajax
Control Toolkit
si vom referentia controalele existente, aflate in AjaxControlToolkit-NoSource\SampleWebSite\Bin
. Vom adauga un nou tab in ToolBox, ii vom zice AjaxControls si vom adauga
itemii apasind pe Choose Items:

 

 

Si apoi indicind prin browse calea la AjaxControlToolkit.dll
pe care l-am downloadat. Apasati pe urma OK si vom avea controalele Ajax.

Trageti un AutoCompleteExtender si un textbox in frmPublisherList.aspx
.

 

Vom completa

public
class wsPublisher
: System.Web.Services.WebService {

cu atributul

[System.Web.Script.Services.ScriptService]

si vom adauga o metoda pentru regasirea publisher-ilor care
incep cu o litera data:

 

[WebMethod]

public string[] GetCompletionPublishers(string prefixText, int
count)

{

if (count
<= 0)

count = 10;

 

List<string> items = new
List<string>(count);

BookObjects.ColPublisher
publishers = new BookObjects.ColPublisher();

publishers.Load();

foreach
(BookObjects.Publisher pub in publishers)

{

if
(pub.Name.IndexOf(prefixText, StringComparison.CurrentCultureIgnoreCase)
== 0)

items.Add(pub.Name);

 

if
(items.Count == count)

break;

}

return
items.ToArray();

 

}

 

 

O vom folosi in Autocomplete:

<asp:ScriptManager runat=”server”>

</asp:ScriptManager>

<asp:TextBox ID=”txtPub” runat=”server” autocomplete=”off”></asp:TextBox>

<cc1:AutoCompleteExtender ID=”AutoPub” runat=”server”

TargetControlID=”txtPub”

ServicePath=”wsPublisher.asmx”

ServiceMethod=”GetCompletionPublishers”

MinimumPrefixLength=”1″

CompletionInterval=”1000″

EnableCaching=”true”

CompletionSetCount=”12″>

</cc1:AutoCompleteExtender>


In momentul de fata putem testa aplicatia si vedea ca se
listeaza numele publisher-ilor.

 

 

Lucruri de facut:

Creat o metoda prin care sa se poata incarca doar cei care
au prefix, nu toti publisher-ii cum am facut in public string[]
GetCompletionPublishers(string prefixText, int count)

De pus scriptManager-ul in Master- ca sa nu fim nevoiti sa
il punem in fiecare pagina.

 

De vazut celelalte controale de la Ajax
Control Toolkit
(live demo la adresa http://ajax.asp.net/ajaxtoolkit/Default.aspx
)

 

 

 

Data viitoare vom vorbi despre scoaterea de rapoarte .

 

 

 

Empire Falls de Richard Russo

Oare de ce mi-a placut asa de mult aceasta carte?
Hai sa vedem: personaje bine conturate, reale(anumite aspecte din Grace si Miles le-am cunoscut personal -cea cu biserica, cu problema de  a nu rani aproapele, cu ipocrizia minciunii si suferinta adevarului ascuns).
O istorie completa, sfirsita intimplator(inec)
Un pic(mai mult) de “ironia sortii” la adresa sotiei necredincioase(cred ca aici a exagerat putin- sa fi avut un resentiment?)

Super carte, in orice caz. Cautati-o in colectia cotidianul de miercurea trecuta….

dilema veche si filmul romanesc

Andrei Plesu despre (ne)increderea bine temperata:
“Strategiile de păstrare a puterii au înlocuit cu totul preocuparea pentru strategii convingătoare de exercitare a ei.
“
Dar tot articolul merita citit

Mircea Vasilescu despre spiritul national in business
“Invers, cînd vreo firmă din ţara lor investeşte în străinătate, evenimentul e celebrat cu mîndrie patriotică”

Cristian Ghinea despre deficientele constitutiei, intre care citez:
“Dacă preşedintele este ales direct de populaţie, cu un program politic,
pentru ca apoi doar să transfere toată puterea spre o altă persoană, cu
care poate să intre sau nu în conflict (iar conflictul
preşedinte-premier a fost mai degrabă regula decît excepţia, după
1991), atunci la ce bun tot tapajul de a alege un preşedinte prin vot
popular?”

Sever Voinescu despre intrebarea intrebarilor in democratie:
“Problema, de fapt, e aceasta: admitem că orice produs al unui proces
democratic este valid sau nu? Pentru această vîrstă a democraţiei, cred
că aceasta este întrebarea întrebărilor. “
OK- dar cine decide ?Si cine pazeste paznicii ? Poti ajunge la altceva mai bun, in conditiile in care paznicii vad doar un singur produs?

Cezar Paul-Badescu enumera citeva emisiuni culturale aici – si bine face.

Robert Turcescu vorbeste despre “Ce e bun cind e de rau“:
“Aştept de ani de zile să apară electoratul raţional şi matur, care nu
crede în lacrimi şi nici în zîmbete. Cînd se iveşte în tablou, daţi-mi,
vă rog, un semn. Portretul acelei Românii îl cumpăr.”
Cum a spus Brucan, “Pentru a deprinde democraţia, românii vor avea nevoie de 20 de ani“, -mai avem inca vreo 3 ani…

export din Excel(dbase, isam) in SQL Server(sau orice alta BD accesibila prin ODBC)

Am avut de facut exportul din dbf in SQL Server – in conditiile in care nu puteam/vroiam folosi DTS sau alte chestii asemanatoare.

Dupa ceva cautare, am dat peste asta

"SELECT * INTO [odbc;Driver={SQL Server};" & _
"Server=<server>;Database=<database>;" & _
"UID=<user>;PWD=<password>].numetabela " & _
"FROM [tabelal] "
Atentie conexiunea initiala trebuie sa fie de tipul ISAM.... adica doar tipurile gasite in registri la adresa
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\ISAM Formats ( dintre ele, Excel, DBase,Exchange, Outlook si Text)

Dar e o modalitate super usoara de a rezolva lucrurile...mai ales daca vrei sa creezi tabela