Avatar billede kkaen Nybegynder
04. april 2006 - 19:36 Der er 35 kommentarer og
1 løsning

Udtræk fra tabel m 2 kriterier

Jeg har en Access-tabel, som jeg gerne vil foretage udtrækninger aaf gennem 2 indtastede kriterier. Men når jeg går ned i datasourcen, og vil sætte kriterierne ind der, så fungerer det ikke, når de 2 steder skal indtastes manuelt ved runtime. Derfor har jeg lavet en forespørgsel ved databasen, som får klaret det ene kriterie. Resultattet heraf har jeg så i et dataset/datatable. Hvordan får jeg så fyret det sidste kriterie af (som har form af sql) op mod dette dataset? Resultattet heraf skal så vises i et GridView, men det klarer jeg nok.
Avatar billede dr_chaos Nybegynder
04. april 2006 - 19:40 #1
du kan sagtens få kriterier med fra en side.
Hvordan ser din side ud og hvad er det du ønsker at gøre?
Avatar billede websam Nybegynder
04. april 2006 - 23:56 #2
Hvorfor laver du ikke bare din sql med de 2 kriterier ?

/Websam
Avatar billede kkaen Nybegynder
05. april 2006 - 08:43 #3
det har jeg skam også prøvet. Men der sker ikke det forventede. Så derfor valgte jeg at gøre det i 2 omgange.
Avatar billede websam Nybegynder
05. april 2006 - 08:59 #4
Hvordan lavede du den sql der ikke virkede ?
Avatar billede kkaen Nybegynder
05. april 2006 - 09:05 #5
Den skrev jeg inde i DataSOurse til GridView. Den ser således ud:

SELECT `F_Id`, `Prioritet`, `Program`, `Omraade`, `Tekst`, `Status`, `Udfoertdato`, `Konsekvens SQL` AS `Konsekvens_SQL`, `Bemaerkning`, `Udviklingstid`, `Pris` FROM `T_Status` WHERE `Program`=? AND `Status`=?

Program og Status er to felter på formen, hvor jeg kan skrive kriterier ind i. Men det virker ikke rigtigt.
Avatar billede dr_chaos Nybegynder
05. april 2006 - 09:11 #6
du kan få dem ud med

<asp:TextBox ID="txtStatus" runat="server"></asp:TextBox>
      <asp:TextBox ID="txtProgram" runat="server"></asp:TextBox>
      <asp:AccessDataSource ID="dta" runat="server"
      SelectCommand="SELECT `F_Id`, `Prioritet`, `Program`, `Omraade`, `Tekst`, `Status`, `Udfoertdato`, `Konsekvens SQL` AS `Konsekvens_SQL`, `Bemaerkning`, `Udviklingstid`, `Pris` FROM `T_Status` WHERE `Program`=? AND `Status`=?"
      >
      <SelectParameters>
      <asp:ControlParameter ControlID="txtStatus" Name="Status" />
      <asp:ControlParameter ControlID="txtProgram" Name="Program" />
      </SelectParameters>
      </asp:AccessDataSource>
Avatar billede websam Nybegynder
05. april 2006 - 09:13 #7
Hvad mener du med 2 felter på formen ? Og jeg er ikke sikker på hvordan du vil lave visningen ?
Avatar billede dr_chaos Nybegynder
05. april 2006 - 09:13 #8
I simplificeret form.
DU kan lave en knap:
<asp:Button ID="btnTest" runat="server" OnClick="VaelgData" />

i en metode i codebehind

protected void VaelgData(object sender, EventArgs e)
{
//dta.Select(new DataSourceSelectArguments());
ditgridview.Databind();
}
Avatar billede kkaen Nybegynder
05. april 2006 - 10:05 #9
Hele scenariet er, at jeg har en AccessTabel, 1 GridView, en DataSource og 2 TextBoxe.
Inde i Datasourcen er der en sql, som ser således ud:

SELECT `F_Id`, `Prioritet`, `Program`, `Omraade`, `Tekst`, `Status`, `Udfoertdato`, `Konsekvens SQL` AS `Konsekvens_SQL`, `Bemaerkning`, `Udviklingstid`, `Pris` FROM `T_Status` WHERE `Program`=? AND `Status`=?"

De 2 TextBoxe skal give input til "Program" og "Status" i sql'en. De udtrykne data fra tabellen skal vises i GridView'et. Men det fungerer ikke p.t.. Så et komplet eller meget udførligt eksempel ville være dejligt.
Avatar billede websam Nybegynder
05. april 2006 - 10:08 #10
Select * From tabel Where Program = "tekst fra felt 1" And Status = "tekst fra felt 2"

Er det ikke bare noget i den stil du skal have fat i så ?
Avatar billede kkaen Nybegynder
05. april 2006 - 10:17 #11
Jo, det er den enkle måde at sige det på...
Avatar billede websam Nybegynder
05. april 2006 - 10:23 #12
Du laver da bare din sql i din code-behind eller hvor du nu har din kode liggende og bruger så den til at trække dine data ud i dit gridview, eller er det ikke godt nok ?
Avatar billede dr_chaos Nybegynder
05. april 2006 - 10:26 #13
har du prøvet det jeg har foreslået dig?
Avatar billede kkaen Nybegynder
05. april 2006 - 10:44 #14
Nej, jeg har ikke prøvet det sidst foreslået endnu. FOr jeg sider lige og debugger lidt. Men det kan være, at jeg skal åbne en tidligere løsning, og så prøve det foreslåede der.

Det, jeg selv prøver med lige nu, er, at jeg har lavet en DataTabel, som er genereret udfra det ene kriterie. Så vil jeg køre en sortering på den DataTabel udfra den andet kriterie.
Koden ser således ud:

DataSet1.UdtraekKunNullDataTable tabel = new DataSet1.UdtraekKunNullDataTable();
DataView myDataView=new DataView(myDataSet.Tables["tabel"], "Program",
"Program", DataViewRowState.CurrentRows);
//Vil finde en enkelt row baseret på en persons navn og state.
myDataView.FindRows("Kriterie2");
Avatar billede kkaen Nybegynder
05. april 2006 - 11:29 #15
Skal der være udkommateret i første linie i

//dta.Select(new DataSourceSelectArguments());
ditgridview.Databind();

fra 09:13:51
?
Avatar billede dr_chaos Nybegynder
05. april 2006 - 11:34 #16
Prøv med den udkommenteret først.
Avatar billede dr_chaos Nybegynder
05. april 2006 - 11:35 #17
du kan gøre det på denne måde:
DataView dv = (DataView) dta.Select(new DataSourceSelectArguments());
            if(dv.Table.Rows.Count>0)
ditgridview.Databind();
Avatar billede kkaen Nybegynder
05. april 2006 - 11:37 #18
Jeg har nu testet 05/04-2006 09:13:51, og har fundet ud af, at jeg faktisk har haft denne løsning før. For denne løsning fungerer fint, lige indtil man ikke skriver noget i det ene felt. Det skulle jo symbolisere, at cell'en inde i tabellen ikke er udfyld. Men der kommer ikke noget data i GridView, når jeg prøver med blank TextBox. Jeg har også prøvet med: '', ' ', "", " ", Empty, empty, null og Null men det har ingen effekt. Hvor og hvordan kan man fortælle systemet, at det skal søge efter blanke felter i tabellen?
Avatar billede kkaen Nybegynder
05. april 2006 - 12:09 #19
Jeg har lavet denne:

protected void AccessDataSource1_Selected(object sender, SqlDataSourceStatusEventArgs e)
    {
        System.Diagnostics.Debug.WriteLine("Sql er fra datasource: "+e.Command.CommandText);
    }

Og inde i DataSOurcen har jeg under "Define Parameters" skrevet:
Name: ? Value:TextBox1.Text Parameter cource: Control ControlID: TextBox1 DefaultValue:
Name: ? Value:TextBox1.Text Parameter cource: Control ControlID: TextBox2 DefaultValue:

Selvom jeg gør dette, og skriver noget i tekstboxene ved kørsel, så skrives der i outputtet:
Sql er fra datasource: SELECT `F_Id`, `Prioritet`, `Program`, `Omraade`, `Tekst`, `Status`, `Udfoertdato`, `Konsekvens SQL` AS `Konsekvens_SQL`, `Bemaerkning`, `Udviklingstid`, `Pris` FROM `T_Status` WHERE `Program`=? AND `Status`=?


Hvordan kan dette være? Er det evt. fordi, der i HTML står:

SelectCommand="SELECT `F_Id`, `Prioritet`, `Program`, `Omraade`, `Tekst`, `Status`, `Udfoertdato`, `Konsekvens SQL` AS `Konsekvens_SQL`, `Bemaerkning`, `Udviklingstid`, `Pris` FROM `T_Status` WHERE `Program`=? AND `Status`=?"

som så overwriter det?
Eller hvor kan problemet være?
Avatar billede dr_chaos Nybegynder
05. april 2006 - 12:17 #20
prøv lige at paste alt koden fra din aspx fil
Avatar billede kkaen Nybegynder
05. april 2006 - 12:34 #21
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Indhold_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <table>
            <tr>
                <td style="width: 100px; height: 24px">
                </td>
                <td style="width: 100px; height: 24px">
                    Program:</td>
                <td style="width: 100px; height: 24px">
                    Status:</td>
                <td style="width: 729px; height: 24px">
                </td>
                <td style="width: 100px; height: 24px">
                    </td>
            </tr>
            <tr>
                <td style="width: 100px; height: 24px">
                    </td>
                <td style="width: 100px; height: 24px">
                    <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" OnTextChanged="DropDownList1_TextChanged">
                        <asp:ListItem>V&#230;lg</asp:ListItem>
                        <asp:ListItem Value="Budget">Budget</asp:ListItem>
                        <asp:ListItem>Bil</asp:ListItem>
                        <asp:ListItem>Database</asp:ListItem>
                    </asp:DropDownList></td>
                <td style="width: 100px; height: 24px">
                    <asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="True" OnTextChanged="DropDownList1_TextChanged">
                        <asp:ListItem>V&#230;lg</asp:ListItem>
                        <asp:ListItem>Ikke udf&#248;rt</asp:ListItem>
                        <asp:ListItem>Udf&#248;rt</asp:ListItem>
                        <asp:ListItem>Afvent</asp:ListItem>
                    </asp:DropDownList></td>
                <td style="width: 729px; height: 24px">
                    <asp:Button ID="Button2" runat="server" Text="Button" OnClick="Button2_Click" /></td>
                <td style="width: 100px; height: 24px">
                    </td>
            </tr>
            <tr>
                <td style="width: 100px; height: 21px;">
                </td>
                <td style="width: 100px; height: 21px;">
                    Program:</td>
                <td style="width: 100px; height: 21px;">
                    Tekst:</td>
                <td style="width: 729px; height: 21px;" rowspan="2">
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1"
                        ErrorMessage="Program skal angives."></asp:RequiredFieldValidator>
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="TextBox1"
                        ErrorMessage="Tekst skal angives."></asp:RequiredFieldValidator></td>
                <td rowspan="3" style="width: 100px; height: 21px" >
                    &nbsp;<asp:AccessDataSource ID="AccessDataSource1" runat="server" DataFile="\\_Status.mdb"
                        DeleteCommand="DELETE FROM `T_Status` WHERE `F_Id` = ?" InsertCommand="INSERT INTO `T_Status` (`F_Id`, `Prioritet`, `Program`, `Omraade`, `Tekst`, `Status`, `Udfoertdato`, `Konsekvens SQL`, `Bemaerkning`, `Udviklingstid`, `Pris`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
                        SelectCommand="SELECT `F_Id`, `Prioritet`, `Program`, `Omraade`, `Tekst`, `Status`, `Udfoertdato`, `Konsekvens SQL` AS `Konsekvens_SQL`, `Bemaerkning`, `Udviklingstid`, `Pris` FROM `T_Status` WHERE `Program`=? AND `Status`=?"
                        UpdateCommand="UPDATE `T_Status` SET `Prioritet` = ?, `Program` = ?, `Omraade` = ?, `Tekst` = ?, `Status` = ?, `Udfoertdato` = ?, `Konsekvens SQL` = ?, `Bemaerkning` = ?, `Udviklingstid` = ?, `Pris` = ? WHERE `F_Id` = ?" OnSelected="AccessDataSource1_Selected">
                        <DeleteParameters>
                            <asp:Parameter Name="F_Id" Type="Int32" />
                        </DeleteParameters>
                        <UpdateParameters>
                            <asp:Parameter Name="Prioritet" Type="Double" />
                            <asp:Parameter Name="Program" Type="String" />
                            <asp:Parameter Name="Omraade" Type="String" />
                            <asp:Parameter Name="Tekst" Type="String" />
                            <asp:Parameter Name="Status" Type="String" />
                            <asp:Parameter Name="Udfoertdato" Type="DateTime" />
                            <asp:Parameter Name="Konsekvens_SQL" Type="Boolean" />
                            <asp:Parameter Name="Bemaerkning" Type="String" />
                            <asp:Parameter Name="Udviklingstid" Type="String" />
                            <asp:Parameter Name="Pris" Type="String" />
                            <asp:Parameter Name="F_Id" Type="Int32" />
                        </UpdateParameters>
                        <SelectParameters>
                            <asp:ControlParameter ControlID="TextBox1" Name="?" PropertyName="Text" />
                            <asp:ControlParameter ControlID="TextBox2" Name="?" PropertyName="Text" DefaultValue=" " />
                        </SelectParameters>
                        <InsertParameters>
                            <asp:Parameter Name="F_Id" Type="Int32" />
                            <asp:Parameter Name="Prioritet" Type="Double" />
                            <asp:Parameter Name="Program" Type="String" />
                            <asp:Parameter Name="Omraade" Type="String" />
                            <asp:Parameter Name="Tekst" Type="String" />
                            <asp:Parameter Name="Status" Type="String" />
                            <asp:Parameter Name="Udfoertdato" Type="DateTime" />
                            <asp:Parameter Name="Konsekvens_SQL" Type="Boolean" />
                            <asp:Parameter Name="Bemaerkning" Type="String" />
                            <asp:Parameter Name="Udviklingstid" Type="String" />
                            <asp:Parameter Name="Pris" Type="String" />
                        </InsertParameters>
                    </asp:AccessDataSource>
                    &nbsp;
               
                </td>
            </tr>
            <tr>
                <td style="width: 100px; height: 27px;" align="right">
                    <asp:Button ID="Button1" runat="server" Text="Opret" OnClick="Button1_Click" /></td>
                <td style="width: 100px; height: 27px;">
                    <asp:TextBox ID="TextBox1" runat="server" OnTextChanged="TextBox1_TextChanged"></asp:TextBox></td>
                <td style="width: 100px; height: 27px;">
                    <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox></td>
            </tr>
            <tr>
                <td style="width: 100px; height: 327px;" colspan="4">
                    <asp:GridView ID="GridView2" runat="server" AllowPaging="True" AllowSorting="True"
                        AutoGenerateColumns="False" DataKeyNames="F_Id" DataSourceID="AccessDataSource1"
                        EmptyDataText="There are no data records to display.">
                        <Columns>
                            <asp:BoundField DataField="F_Id" HeaderText="F_Id" ReadOnly="True" SortExpression="F_Id"
                                Visible="False" />
                            <asp:BoundField DataField="Prioritet" HeaderText="Prioritet" SortExpression="Prioritet" />
                            <asp:BoundField DataField="Program" HeaderText="Program" SortExpression="Program" />
                            <asp:BoundField DataField="Omraade" HeaderText="Omraade" SortExpression="Omraade"
                                Visible="False" />
                            <asp:BoundField DataField="Tekst" HeaderText="Tekst" SortExpression="Tekst" />
                            <asp:BoundField DataField="Status" HeaderText="Status" SortExpression="Status" Visible="False" />
                            <asp:BoundField DataField="Udfoertdato" HeaderText="Udfoertdato" SortExpression="Udfoertdato"
                                Visible="False" />
                            <asp:CheckBoxField DataField="Konsekvens_SQL" HeaderText="Konsekvens_SQL" SortExpression="Konsekvens_SQL"
                                Visible="False" />
                            <asp:BoundField DataField="Bemaerkning" HeaderText="Bemaerkning" SortExpression="Bemaerkning"
                                Visible="False" />
                            <asp:BoundField DataField="Udviklingstid" HeaderText="Udviklingstid" SortExpression="Udviklingstid"
                                Visible="False" />
                            <asp:BoundField DataField="Pris" HeaderText="Pris" SortExpression="Pris" Visible="False" />
                            <asp:CommandField ShowEditButton="True" />
                            <asp:HyperLinkField DataNavigateUrlFields="F_Id" DataNavigateUrlFormatString="indhold.aspx?F_Id={0}"
                                HeaderText="Detaljer" NavigateUrl="~/Indhold/indhold.aspx" Text="Vis" />
                        </Columns>
                    </asp:GridView>
                    <br /></td>
            </tr>
            <tr>
                <td style="width: 100px">
                </td>
                <td style="width: 100px">
                </td>
                <td style="width: 100px">
                </td>
                <td style="width: 729px">
                </td>
                <td style="width: 100px">
                </td>
            </tr>
            <tr>
                <td style="width: 100px; height: 21px;">
                </td>
                <td style="width: 100px; height: 21px;">
                </td>
                <td style="width: 100px; height: 21px;">
                </td>
                <td style="width: 729px; height: 21px;">
                </td>
                <td style="width: 100px; height: 21px;">
                </td>
            </tr>
        </table>
    </div>
    </form>
</body>
</html>
Avatar billede kkaen Nybegynder
05. april 2006 - 13:16 #22
Nu har jeg prøvet, at sætte sql'en manuelt. Men når jeg så kører det, så kommer den til
GridView1.DataBind();
og giver exceptionen
DataBinding: 'System.Data.DataRowView' does not contain a property with the name 'F_Id'.
Der er både "F_Id" i sql'en og inde i GridView. Jeg har endda prøvet, at slette alle kolonner inde i GridView og vælge "AutoGenerate", men fejlen kommer aligevel.
Hvad betyder fejlen, og hvorfor kommer den?
Avatar billede dr_chaos Nybegynder
05. april 2006 - 13:59 #23
Dine select parametre skal være

<SelectParameters>
                            <asp:ControlParameter ControlID="TextBox1" Name="Program" PropertyName="Text" />
                            <asp:ControlParameter ControlID="TextBox2" Name="Status" PropertyName="Text" DefaultValue=" " />
                        </SelectParameters>
Avatar billede kkaen Nybegynder
05. april 2006 - 14:03 #24
Jo, men i proceduren hvor sql er sat manuelt, har jeg også sat databaseforbindelsen manuelt. Så der er vel ikke noget SelectParameters, når input til sql blot f.eks. er:TextBox1.Text.ToStirng()
?
Jeg har lavet det hele i codebehinden nu.
Avatar billede dr_chaos Nybegynder
05. april 2006 - 14:09 #25
så skal du fjerne dine select parametre.

Hvordan ser den manuelle sql ud ?
Avatar billede kkaen Nybegynder
05. april 2006 - 14:18 #26
Sql'en er den samme. Og det er forbindelsen også. Men jeg har jo godt nok forbindelse og det hele. Der er bare det med propertien her, som burde være der.
Det interessante af koden (=det jeg har lavet om) ser således ud:

  con3.Open();
            ds3 = new DataSet("SELECT3");
            OleDbDataAdapter adapter3 = new OleDbDataAdapter(sqlString3, connection3);
            adapter3.Fill(ds3);
           
            GridView1.DataSource = ds3;
OleDbDataAdapter daDataAdapter = new OleDbDataAdapter(sqlString3, connection3);
DataTable tblDataTable = new DataTable("T_Status");
daDataAdapter.Fill(tblDataTable);
DataView dvDataView;
dvDataView = new DataView();
dvDataView.Table = tblDataTable;
dvDataView = new DataView(tblDataTable);
GridView1.DataSource = dvDataView.DataViewManager.DataSet.Tables[1];//dvDataView;
GridView1.DataBind();
Avatar billede kkaen Nybegynder
05. april 2006 - 16:04 #27
Nu har jeg lavet et lille nyt forsøg, hvor jeg har det samme, men fra stratch af, så det ikke er "forurenet" med div. kode. Inde i datasourcen kan jeg nu godt få det rigtige output ved brug af 2 tekstboxe. Men når jeg kører det, så kommer der ikke noget i GridView'et. Jeg går ud fra, at dette sker, fordi der ikke har været et postback. Jeg har så prøvet at sætte POstBackUrl for knappen til den samme side. Men data bliver stadig ikke vist. Hvordan får man Datasourcen til at registrere det indtastede i textboxene, og derefter at binde der derudfra genererede dataset op mod DataGrid'et?
Avatar billede kkaen Nybegynder
05. april 2006 - 16:18 #28
Jo, det bliver vist aligevel. Problemet er bare, at der ikke kommer noget ud, hvis man ikke taster noget ind i alle felterne. Og ovre i accessTabellen findes der jo null-værdier, så det kommer ikke til at køre godt sammen.
Jeg har prøvet at sætte en defaultvalue i de respektive felter på aspx-siden, men disse bliver ikke fortolket som null-værdier ovre i accessTabellen. Jeg har prøvet med: "", " ", '', ' ', Empty, empty og null.
Hvad man man sætte ind som defaultvalue, for det forstås som "null" ovre i Access? Jeg tror nemlig, at dette vil løs problemmet.
Avatar billede dr_chaos Nybegynder
05. april 2006 - 17:33 #29
du skal sætte postback="true" på knappen
Avatar billede kkaen Nybegynder
06. april 2006 - 16:24 #30
Jeg synes ikke, at der findes noget "postback"-felt på knappen. Der er nog en "postbackUrl", hvor jeg selvfølgelig kan sætte min side ind, som jeg har gjort før. Men findes der ikke et sted, hvor man kan sætte en generel postbackmulighed?
Avatar billede dr_chaos Nybegynder
07. april 2006 - 09:15 #31
min fejl det hedder AutoPostBack="true"
Avatar billede kkaen Nybegynder
07. april 2006 - 09:19 #32
Det har jeg heller ikke noget, der hedder på en almindelig knap, nej...
Avatar billede dr_chaos Nybegynder
07. april 2006 - 09:22 #33
lav en <asp:button i stedet for
Avatar billede kkaen Nybegynder
07. april 2006 - 09:32 #34
det er det allerede...
Avatar billede dr_chaos Nybegynder
07. april 2006 - 09:43 #35
ok nu er jeg forvirret.

Fortæl mig lige hvad der virker og hvad som ikke virker og hvordan det skal virke.
Avatar billede kkaen Nybegynder
30. december 2010 - 16:24 #36
Det var vist en fejl i hele applicationen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester