WN

WN (https://www.wn.se/forum/index.php)
-   Off Topic (https://www.wn.se/forum/forumdisplay.php?f=7)
-   -   Söka i databas, hjälp! (https://www.wn.se/forum/showthread.php?t=30968)

digi 2008-08-06 11:54

Tjo!
Antar att jag får lägga detta under Off Topic eftersom det inte har så mkt med webbutveckling att göra :)

Sitter på jobbet och vill skapa ett litet VB-program där användaren matar in en sträng (textbox) och anger två datum (start- och slutdatum).
Det programmet sen ska göra är att söka poster i en databas som matchar denna sträng inom angiven tidsperiod.

Har försökt att göra detta som ett webbscript men det fick timeout då det handlar om VÄLDIGT stora tabeller. Dessutom är ett program att föredra då servern ligger internt och jag har ingen åtkomst till den lokala webbservern, med andra ord måste varje användare sätta upp en egen lokal server för att få webbscriptet att funka.

Tips mottages varmt!
Har googlat i 2 dygn snart utan resultat. Kan tillägga att jag aldrig har jobbat med visual studio och har ganska kass koll på VB över lag men jag vill ge det ett försök. Har mest arbetat med VBscript tidigare samt gjort enklare program i VB 6.0, aldrig med databaskoppling.

Nån som har länk till tutorial eller kan peka mig i rätt riktning?

Tack på förhand! :)
Pelle

edit: än en gång vill jag påpeka att jag är en riktig nybörjare på detta område så försök hålla förklaringar/tips på en nybörjarnivå :) och ja, jag borde plöja igenom flertalet kurser och lära mig grunderna, men om jag får ta en kik på något liknande tror jag att jag kan lista ut resten :)

StefanBergfeldt 2008-08-06 11:58

Får du timeout så har du gjort fel.
Är textsträngen en exakt söksträng, eller har du någon form av fulltext-sök?

Datumen lagras som datum i databasen hoppas jag, och alla tre fält är korrekt indexerade?

Då ska det INTE bli timeout.

Annars är principen för att göra skrivbordsprogram samma som för webbprogram. Dra dit dina kontroller, dubbelklicka på knappen och skriv koden.

digi 2008-08-06 12:02

Citat:

Originally posted by StefanBergfeldt@Aug 6 2008, 10:58
Får du timeout så har du gjort fel.
Är textsträngen en exakt söksträng, eller har du någon form av fulltext-sök?
Datumen lagras som datum i databasen hoppas jag, och alla tre fält är korrekt indexerade?
Då ska det INTE bli timeout.
Annars är principen för att göra skrivbordsprogram samma som för webbprogram. Dra dit dina kontroller, dubbelklicka på knappen och skriv koden.

För att förtydliga lite: vi kör i vanliga fall detta i eclipse med sql-plugin och sökningarna kan ta upp mot 10min. Vi snackar om väldigt stora mängder data :)

Skrivbordsprogram är det jag vill göra här, det blir smidigast för de som ska använda det. Kontrollerna har jag lagt dit, det är bara koden som återstår, det är där jag har kört fast lite :)

Ara 2008-08-06 12:19

Hur ser sökningen ut?

digi 2008-08-06 12:23

SQL-queryn är väldigt enkel, men jag vet inte hur jag kör den och returnerar värdet till mitt program :)

Citat:

SELECT field1, field2 FROM table WHERE field3 LIKE '123456789%' AND "Start Date" BETWEEN '01-JUL-2008' AND '31-JUL-2008'
Det är 12345679 som anges i textrutan och datumen hämtas från två andra kontroller.

digi 2008-08-06 12:35

Bifogar en bild på hur det kommer se ut, kanske blir lättare att förstå mitt svamel med lite visualisering :)

http://digitalunit.se/projects/app.jpg

StefanBergfeldt 2008-08-06 13:30

Släng in en datalist eller datagrid eller nåt där du visar resultatet.

Har du någon anslutning till databasen i koden, eller ska du ha hjälp med hela den biten?

digi 2008-08-06 13:38

Citat:

Originally posted by StefanBergfeldt@Aug 6 2008, 12:30
Släng in en datalist eller datagrid eller nåt där du visar resultatet.
Har du någon anslutning till databasen i koden, eller ska du ha hjälp med hela den biten?

Tack för ditt svar Stefan!
Jag har fått upp nått slags DataSet till de tabeller jag vill söka i, tänkte dock endast söka i en tabell till att börja med för att testa detta. Har plöjt igenom massa video-tutorials ang LINQ utan att bli klokare. Det jag vill göra är alltså att koppla upp mot "min" MS SQL 2005 db, köra en query och visa resultatet i en liten ruta (där det står "result")

StefanBergfeldt 2008-08-06 14:07

Denna klass använder jag för min databaskommunikation.
http://www.aspsidan.se/code/default.asp?c=23495

Sedan anropar jag den på följande vis:
http://www.aspsidan.se/code/default.asp?c=23496

Därefter behöver du bara binda ihop din DataList med MittResultat
DataList1.DataSource = MinKlass.MittResultat();
DataList1.DataBind();

Såg förresten att du använder VB, men det ska väl gå att översätta?

digi 2008-08-06 14:24

Tack för att du försöker hjälpa mig Stefan, fattar dock inte mkt av din kod =/
Tror jag får försöka vidare, tycker det är konstigt att jag inte hittar nån info om detta. Är ju inte världens svåraste program jag försöker göra... kanske bara googlar på fel termer :)

digi 2008-08-06 15:19

Har en uppdaterad printscreen av programmet nu om någon fortfarande orkar hjälpa mig :)

http://digitalunit.se/projects/app2.jpg

Text i översta rutan, välja start och slutdatum, rulla progressbar (oviktigt), visa resultat i datagridview där nere, that's it... men hur? :)

StefanBergfeldt 2008-08-06 15:32

Det första är en klass. Skapa en klass och spara den i App_Code-mappen.
Det andra kan du iofs skippa och bara i knappens click-event lägga följande:

using (CRS.Data data = new CRS.Data())
{
data.CommandText = "SELECT No, Customer, [Date] FROM tabell WHERE searchField=@search AND [date] BETWEEN @date1 AND @date2";
data.AddParameter("@search", DbType.VarChar, tbSearch.Text);
data.AddParameter("@date1", DbType.DateTime, calFrom.SelectedDate);
data.AddParameter("@date2", DbType.DateTime, calTo.SelectedDate);
DataList1.DataSource = data.ExecuteReader();
DataList1.DataBind();
}

[edit]
Ändrade så det är vettiga parametrar
[/edit]

digi 2008-08-06 17:34

Efter timmar av pill fram och tillbaka tror jag att jag närmar mig en lösning! :)

Nu återstår endast ett error för att min kompilering ska gå igenom
Kod:

'NWNDWHDataSetTableAdapters' is not a member of 'System.Windows.Forms.TextBox'.
Hur kommer jag runt detta? :blink:

Koden:
Kod:

Try
  Me.NWN_Call1TableAdapter.Fill(Me.NWNDWHDataSet._NWN_slask1, texten.Text, CType(dateFrom.Value, Date), CType(dateTo.Value, Date))
Catch ex As System.Exception
  System.Windows.Forms.MessageBox.Show(ex.Message)
End Try



Alla tider är GMT +2. Klockan är nu 06:39.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson