SitePoint Sponsor

User Tag List

Page 1 of 2 12 LastLast
Results 1 to 25 of 28
  1. #1
    SitePoint Zealot
    Join Date
    Jul 2002
    Posts
    144
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    NEWBIE needs assistance

    I have already posted this in the ASP forum. Unfortunately, no one was able to help me. This question regards ASP and ACCESS.

    The database I have to make available online has a 'master table'. On this master table, some of the records have subdatasheets attached to them. I have made a search that can search through the records in the master table, but it doesnt search through or display the data in the subdatasheets.

    Can anyone help me on this? I need the records in the subdatasheets available for me to search through and stuff.

    ANY HELP WILL BE APPRECIATED!!!

    Here is my code: (the core part of it)

    ANY OTHER ADDITIONAL TIPS TO MY CODE IS ALSO WELCOMED.

    [vbs]

    <form action ="<%= request.servervariables("script_name") %>" method="post">
    <input type="text" name="u_input" value="<%= u_input %>">
    <select name="u_field" size="1">
    <option <% ' write out all the search fields and select
    if u_field = "Organization" or u_field = "" then
    response.write "selected "
    end if
    %>value="Organization">Organization</option>
    <option <%
    if u_field = "keyword1" then
    response.write "selected "
    end if
    %>value="keyword1">Subject</option>
    <option <%
    if u_field = "Description" then
    response.write "selected "
    end if
    %>value="Description">Program Description</option>
    </select>
    <input type="submit" value="Submit">
    </form>
    </center>

    <BR>
    <BR>

    <div align="left">
    <%
    u_input = trim(request.form("u_input")) 'u_input is the varible for user input
    ' the trim function removes any blanks around the the use input
    u_field=request.form("u_field") 'the dropdown varible for user inputted search field

    if u_input <> "" then ' If the user entered a value query the db
    accessdb="Community_Services_Directory" ' name of the access db
    table_name="tblDirectoryDatabase" ' name of the query within the access db
    cn="driver={microsoft access driver (*.mdb)};"
    cn=cn & "dbq=" & server.mappath(accessdb)
    set rs = server.createobject("ADODB.Recordset")
    sql = "select * from " & table_name & " where " & u_field & " like '%%" & u_input & "%%' "

    'The line below can be implemented when the sql command is required to be seen
    'response.write sql & "<br>"
    %>

    <font face="Lucida calligraphy" size=+3><b>
    <%
    response.write "Search Results:"
    response.write "<HR>"
    %>

    </font></b>
    <%
    rs.Open sql, cn

    if rs.eof or rs.bof then
    response.write "No results found..."
    observations=0
    else
    observations=1
    end if 'end check for observations
    end if 'end check for user input
    %>

    <% 'If there are observations then display them
    if observations > 0 then %>

    <%
    'Write the values
    rs.movefirst

    while not rs.eof
    %>

    <% 'This is where listing of the contents begin
    'Each cell information is extracted to each category
    %>

    <p><b>Organization/b> <%=rs("Organization")%> <BR>
    <b>Address/b> <%=rs("Street Address")%> <BR>
    <b>City/b> <%=rs("City 1")%> <BR>
    <b>Postal Code/b> <%=rs("Postal Code 1")%> <BR>
    <b>Phone/b> (604) <%=rs("Phone 1")%> <BR>
    <b>Fax/b> (604) <%=rs("Fax 1")%> <BR>

    <% 'Links have been placed for the email and website %>

    <b>E-mail/b> <a href="mailto%=rs("E-mail address")%>">
    <%=rs("E-mail address")%></a> <BR>
    <b>Website/b> <a href="http://<%=rs("Internet Resources")%>"> <%=rs("Internet Resources")%></a> <BR>
    <b>Description/b> <BR> <I>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <%=rs("Description")%></I><BR>
    <b>Subject/b> <%=rs("keyword1")%>
    <BR>
    <BR>
    <div align="center"><a href="#top">[Back to Top]</a></div>
    </p>

    <img src="skal3.gif" width="550" height="12">

    <BR>
    <BR>
    <%
    RS.MoveNext
    %>

    <% WEND %>
    <% 'END OF WHILE LOOP %>

    <%
    end if 'end of check of obs for display %>

    [/vbs]

    Thanks,

    Spaz
    Just a little boy trying to make his way into the world...
    ~~~Spaz Boy
    Programmer + Gamer = ProGamer

  2. #2
    SitePoint Zealot
    Join Date
    Jul 2002
    Posts
    144
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    BUMP BUMP
    Just a little boy trying to make his way into the world...
    ~~~Spaz Boy
    Programmer + Gamer = ProGamer

  3. #3
    SitePoint Wizard Goof's Avatar
    Join Date
    Feb 2001
    Location
    Pittsburgh, PA
    Posts
    1,154
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Surely you don't need to bump this every hour (especially when you have fools like me making replies like this).

    Goof
    Nathan Rutman
    A slightly offbeat creative.

  4. #4
    SitePoint Wizard
    Join Date
    Jan 2001
    Location
    Milton Keynes, UK
    Posts
    1,011
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    SpazBoy, you're going to have to give use more info on the database tables. I've got no idea what the 'subdatasheets' are but at a guess I'd say you may be looking at some Access forms which give a view onto the tables/data.

    If you open the database file (<filename>.mdb) you should see a panel which lists a number of Objects. Click on the Table object and the database tables will be displayed on the right.

    In turn, right click on each table and select 'Design view' from the menu. The table's fields and field data types will be listed.

    If you want more help you'll need to post the details of all the tables (table name, field names and field types).

    Also, if you select Tools -> Relationships from the menu you may see a diagram showing the relationships of the tables. If you do see a diagram grabbing a screen shot of this and attaching it to the post (or posting it on a website somewhere) would also help. (If you don't see a diagram then the database designer hasn't set up the table relationships).

  5. #5
    SitePoint Zealot
    Join Date
    Jul 2002
    Posts
    144
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Attn: Shane

    First of all, thanks for trying to help. Except for Goof and Sub, no one has really responded to this problem.

    Firstly, the relationship set up for my tables is this:


    tblPrograms (infinite sign) ---------> (1)'master table'

    the tbl Programs contains the records of the subdatasheets from the master table.

    the relationship exists from a field name Organization Id in the tblPrograms to Id of the master table. I think this is what you call a one to many relationship.

    As for the field types, there is nothing special. Except the primary id key for both tables are set to autonumber.

    Solution I have thought of so far:
    I was thinking if I can add to my sql statement to search from both tables. This will definitely get around my subdatasheet problem.

    unforunately, this did not work:

    [vbs]
    sql= " SELECT * FROM tblDirectoryDatabase LEFT JOIN tblPrograms WHERE " & u_field & " LIKE '%%" & u_input_clean & "%%' "
    [/vbs]

    Is that enough info Shane?


    Thanks,

    Spaz
    Just a little boy trying to make his way into the world...
    ~~~Spaz Boy
    Programmer + Gamer = ProGamer

  6. #6
    SitePoint Zealot
    Join Date
    Jul 2002
    Posts
    144
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    CAN ANYONE TELL ME WHAT IS WRONG WITH THIS LINE?>????

    [vbs]
    sql = "SELECT * FROM tblPrograms RIGHT JOIN tblDirectoryDatabase ON tblPrograms.Organization=tblDirectoryDatabase.Id WHERE " & u_field & " LIKE '%%" & u_input_clean & "%%' "
    [/vbs]


    Thanks in advance,

    Spaz
    Just a little boy trying to make his way into the world...
    ~~~Spaz Boy
    Programmer + Gamer = ProGamer

  7. #7
    SitePoint Wizard
    Join Date
    Jan 2001
    Location
    Milton Keynes, UK
    Posts
    1,011
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    I'd recommend that you get WinSql. This will allow you to run sql statements against the db. It's a lot easier to build and check the sql statements outside of you code and then integrate them once you've got them working.

    One problem you will have with the code is that you're allowing users to use any old field name, which may not even be in either of the tables. It'd be better to give the user a list of fields from which they can pick. You can then build the WHERE clause for the SQL accordingly. (At present your code assumes that the search field is a string data type.)

    Also, selecting all the fields in both tables (using *) is normally less effcient than specifying the required fields by name.

    Without knowing all the table fields/data types it's a bit difficult providing anything better but try the following.

    (Go get winSql, set up an ODBC connection and try the following sql by plugging some data for the u_field and u_input_clean variables.)
    Code:
    SQL Statement
    SELECT	D.*,
    	P.*
    FROM	tblDirectoryDatabase D
    	LEFT OUTER JOIN tblPrograms P ON D.Id = P.OrganizationId
    WHERE	<u_field> LIKE '%<u_input_clean>%'
    Code:
    ASP Script
    strSQL = "SELECT	D.*, P.* " & _
    		"FROM	tblDirectoryDatabase D " & _
    		"LEFT OUTER JOIN tblPrograms P ON D.Id = P.OrganizationId " & _
    		"WHERE	" & u_field & " LIKE '%" & u_input_clean & "%'"

  8. #8
    SitePoint Zealot
    Join Date
    Jul 2002
    Posts
    144
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

    [Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'OrganizationFROM tblProgramsRIGHT JOIN tblDirectoryDatabase ON tblPrograms.Organization = tblDirectoryDatabase.Id WHERE Organization LIKE'.

    /search_fields.asp, line 109

    okay that is what I get when I try to run this line:

    [vbs]
    sql = "SELECT Organization" & "FROM tblPrograms" & "RIGHT JOIN tblDirectoryDatabase ON tblPrograms.Organization = tblDirectoryDatabase.Id" & " WHERE " & u_field & " LIKE " '%%" & u_input_clean & "%%' "
    [/vbs]
    Just a little boy trying to make his way into the world...
    ~~~Spaz Boy
    Programmer + Gamer = ProGamer

  9. #9
    SQL Consultant gold trophysilver trophybronze trophy
    r937's Avatar
    Join Date
    Jul 2002
    Location
    Toronto, Canada
    Posts
    39,347
    Mentioned
    63 Post(s)
    Tagged
    3 Thread(s)
    "OrganizationFROM tblProgramsRIGHT" is missing a space between Organization and FROM, and again between tblPrograms and RIGHT

    you can see how this is happening here --
    Code:
    sql = "SELECT Organization" & "FROM tblPrograms" & "RIGHT Join ...
    you really must watch what you're stringing together carefully

    that's why the recommendation for WinSQL -- i haven't used it myself, so i cannot advise on its use, and i'd personally just open access and run the query in the query window, but...

    anyhow, the idea is you should get your sql running successfully first before trying to run it parameterized in an encapsulating language like VB

    rudy
    http://rudy.ca/

  10. #10
    SitePoint Zealot
    Join Date
    Jul 2002
    Posts
    144
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Thanks Rudy

    I will keep that in mind for sure.

    At first I didnt notice it because when I did my research, some site dont have spaces there...
    Just a little boy trying to make his way into the world...
    ~~~Spaz Boy
    Programmer + Gamer = ProGamer

  11. #11
    SitePoint Zealot
    Join Date
    Jul 2002
    Posts
    144
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    One more thing Rudy, since you are an expert in database stuff (I visited your site), can you help me with the subdatasheet problem?

    Possible solutions I have thought of:

    1. Alter the sql statements so it can take information from both tables

    2. Find a way to access the data direct with some sort of coding

    3. (I dont think this is an efficient way) I can set up two database connections. Have two different loops going through the two different tables. Afterward, I will list results of both. (One thing is for certain, there will be no duplicated data. EX: Organizations will not be repeated)

    Note: this database is for a non profit information services. Thus, the data is mostly different community services and organizations.


    Thanks!

    Spaz
    Just a little boy trying to make his way into the world...
    ~~~Spaz Boy
    Programmer + Gamer = ProGamer

  12. #12
    SQL Consultant gold trophysilver trophybronze trophy
    r937's Avatar
    Join Date
    Jul 2002
    Location
    Toronto, Canada
    Posts
    39,347
    Mentioned
    63 Post(s)
    Tagged
    3 Thread(s)
    what can i tell you? do it in sql

    my access experience is limited to tables and queries, and does not include subdatasheets, but your situation sounds like a join

    sorry, i don't do asp, so i cannot advise you on code

    like i said, you should get your query running in access first

    can you upload a screenshot of your relationship diagram? it's under the Tools menu or something

    rudy

  13. #13
    SitePoint Zealot
    Join Date
    Jul 2002
    Posts
    144
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Seriously Rudy, I would use sql and php instead of this ASP stuff and Access. Unfortunately, my company likes Access because its easier to use and update for them.


    Anyways, since the sql line is causing so much trouble (and I dont know if it actually solves my problems by joining tables), I am going to try another solution.

    I was thinking of opening two connections, one to the table where the subdatasheets are and one to the 'master table'. Now, for sure I will obtain all the records I need. Unfortunately, I am getting errors now with this solution as well.

    My sql line is correct, so no problems there. But the problem exists when I set up the connections to the tables of the database. Am I allowed to set up to connections to my database?

    Code:
    [vbs]
    set rs = server.createobject("ADODB.Recordset")
    set rs2 = server.createobject("ADODB.Recordset")
    [/vbs]

    I will get the screenshot asap....

    Thanks,

    Spaz
    Just a little boy trying to make his way into the world...
    ~~~Spaz Boy
    Programmer + Gamer = ProGamer

  14. #14
    SitePoint Zealot
    Join Date
    Jul 2002
    Posts
    144
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Here is the screenshot:
    Attached Images Attached Images
    Just a little boy trying to make his way into the world...
    ~~~Spaz Boy
    Programmer + Gamer = ProGamer

  15. #15
    SQL Consultant gold trophysilver trophybronze trophy
    r937's Avatar
    Join Date
    Jul 2002
    Location
    Toronto, Canada
    Posts
    39,347
    Mentioned
    63 Post(s)
    Tagged
    3 Thread(s)
    I would use sql and php instead of this ASP stuff and Access
    you will have exactly the same problems with MySQL ("sql" by itself generally refers to the language, not a particular database)
    Unfortunately, my company likes Access because it's easier to use and update for them.
    can't say i blame them, because it is -- the desktop GUI is fabulous, and if you have an Access programmer develop a couple of forms and reports, you have a complete application
    Anyways, since the sql line is causing so much trouble (and I dont know if it actually solves my problems by joining tables), I am going to try another solution.
    my strong recommendation is to get the sql working first

    from the relationship diagram you posted, you have a very simple one-to-many structure, and there's really no reason why you cannot have a query with the results you want

    in your first post you said "On this master table, some of the records have subdatasheets attached to them" which means a LEFT JOIN from tblDirectoryDatabase to tblPrograms

    you also said "I have made a search that can search through the records in the master table, but it doesn't search through or display the data in the subdatasheets"

    well, by the time you're finished, it will

    the first thing you have to do is make sure you select fields from both tables, and the second thing is, you have to join them on the right columns --

    Code:
    SELECT Organization
         , [Program Name]
      FROM tblDirectoryDatabase
    LEFT OUTER
      JOIN tblPrograms
        ON tblDirectoryDatabase.Id
         = tblPrograms.[Organization ID#]
    ORDER
        BY Organization
         , [Program Name]
    run that in Access (we don't want to mess around with ASP until the query is working)

    rudy

  16. #16
    SitePoint Zealot
    Join Date
    Jul 2002
    Posts
    144
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    a few questions Rudy:

    SELECT Organization
    , [Program Name]
    FROM tblDirectoryDatabase
    LEFT OUTER
    JOIN tblPrograms
    ON tblDirectoryDatabase.Id
    = tblPrograms.[Organization ID#]
    ORDER
    BY Organization
    , [Program Name]

    I guess it doesnt need to be all in one line in Acces eh?

    Just to make sure I understand and make this thing correct:

    [vbs]
    SELECT (table fields? so the " * " thingy isnt a good idea I guess) FROM tblDirectoryDatabase LEFT OUTER JOIN tblPrograms ON tblDirectoryDatabse.id = tblPrograms.(I dont understand what you wrote here) ORDER BY organization ASC

    'does that look right to you?
    [/vbs]
    Just a little boy trying to make his way into the world...
    ~~~Spaz Boy
    Programmer + Gamer = ProGamer

  17. #17
    SQL Consultant gold trophysilver trophybronze trophy
    r937's Avatar
    Join Date
    Jul 2002
    Location
    Toronto, Canada
    Posts
    39,347
    Mentioned
    63 Post(s)
    Tagged
    3 Thread(s)
    did you run it?

    yes, SELECTing a column list is preferred (see Why SELECT * is bad -- in fact, that site might help you a lot, there's lots of ASP info)

    you didn't understand the LEFT JOIN ON condition? i was merely linking the foreign key [Organization ID#] in tblPrograms to the primary key Id in tblDirectoryDatabase

    that's a basic left outer join, and i can give you references where you can learn more about it

    the reason the column names have those square brackets around them is because that's how you "escape" field names in Access that contain spaces (blame this on whoever designed your Access tables, although it's not an insurmountable problem, just a nuisance)

    so, did you run it?
    rudy.ca | @rudydotca
    Buy my SitePoint book: Simply SQL
    "giving out my real stuffs"

  18. #18
    SitePoint Zealot
    Join Date
    Jul 2002
    Posts
    144
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    GIVES RUDY A HIGH FIVE

    SELECT Organization, [Program name] FROM tblDirectoryDatabase LEFT OUTER JOIN tblPrograms
    ON tblDirectoryDatabase.id = tblPrograms.[Organization ID#]
    ORDER BY Organization ASC
    ..is what I put in.

    The result:

    first column: Organization name
    second column: Program name
    wooohhooo

    now back to the ASP crap...
    fixing it up right now..

    *salutes*
    Spaz
    Just a little boy trying to make his way into the world...
    ~~~Spaz Boy
    Programmer + Gamer = ProGamer

  19. #19
    SitePoint Zealot
    Join Date
    Jul 2002
    Posts
    144
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    [vbs]
    sql = "SELECT Organization, [Program Name], [Street Address], [City 1], [Postal Code 1], [Phone 1], [Fax 1], [E-mail Address], [Internet Resources], [description], [keyword1] FROM tblDirectoryDatabase LEFT OUTER JOIN tblPrograms ON tblDirectoryDatabase.Id = tblPrograms[Organization ID#] " & " WHERE " & u_field & " LIKE '%%" & u_input & "%%' "
    [/vbs]

    I think this will work, please have a look.

    Spaz
    Just a little boy trying to make his way into the world...
    ~~~Spaz Boy
    Programmer + Gamer = ProGamer

  20. #20
    SitePoint Zealot
    Join Date
    Jul 2002
    Posts
    144
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Provider error '80004005'

    Unspecified error

    /search_fields.asp, line 113

    with this sql line:

    [vbs]
    sql = "SELECT Organization, [Program Name], [Street Address], [City 1], [Postal Code 1], [Phone 1], [Fax 1], [E-mail Address], [Internet Resources], [description], [keyword1] FROM tblDirectoryDatabase LEFT OUTER JOIN tblPrograms ON tblDirectoryDatabase.Id = tblPrograms[Organization ID#] " & " WHERE [Program Name] OR " & u_field & " LIKE '%%" & u_input & "%%' "
    [/vbs]
    Just a little boy trying to make his way into the world...
    ~~~Spaz Boy
    Programmer + Gamer = ProGamer

  21. #21
    SitePoint Zealot
    Join Date
    Jul 2002
    Posts
    144
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Nevermind, I fix the previous problem.

    but this problems still exists:

    [Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'tblDirectoryDatabase.Id = tblPrograms[Organization ID#]'.

    /search_fields.asp, line 113

    what operator am I missing?

    Spaz
    Just a little boy trying to make his way into the world...
    ~~~Spaz Boy
    Programmer + Gamer = ProGamer

  22. #22
    SitePoint Zealot
    Join Date
    Jul 2002
    Posts
    144
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    LOLOPLOLOLOOLOLOLOL

    SORRY for the garbage posts, I didnt see the error until now!!!

    I dont mean to stuff the boards with useless replies!

    I forgot the " . " between tblPrograms and [Organization ID#]

    LOL

    Spaz
    but I still have other problems, should be fixed soon!
    Just a little boy trying to make his way into the world...
    ~~~Spaz Boy
    Programmer + Gamer = ProGamer

  23. #23
    SitePoint Zealot
    Join Date
    Jul 2002
    Posts
    144
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Microsoft OLE DB Provider for ODBC Drivers error '80004005'

    [Microsoft][ODBC Microsoft Access Driver] The specified field '[Street Address]' could refer to more than one table listed in the FROM clause of your SQL statement.

    /search_fields.asp, line 113

    can I fix this problem simply by adding:

    tblDirectoryDatabase.[Street Address] to specify the column of which table I want?

    I tried it, but then afterward, I got an "unspecifed error"

    Spaz
    Just a little boy trying to make his way into the world...
    ~~~Spaz Boy
    Programmer + Gamer = ProGamer

  24. #24
    SQL Consultant gold trophysilver trophybronze trophy
    r937's Avatar
    Join Date
    Jul 2002
    Location
    Toronto, Canada
    Posts
    39,347
    Mentioned
    63 Post(s)
    Tagged
    3 Thread(s)
    yes, when more than one table in a query has the same column name, you must qualify every occurrence

    as for your "unspecified" error, no doubt it is in your WHERE clause

    the last version you posted was
    Code:
    WHERE [Program Name] 
       Or " & u_field & " Like '%%" & u_input & "%%' "
    you haven't given a condition for [Program Name] -- each field has to have its own condition
    rudy.ca | @rudydotca
    Buy my SitePoint book: Simply SQL
    "giving out my real stuffs"

  25. #25
    SitePoint Zealot
    Join Date
    Jul 2002
    Posts
    144
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Okay I fixed the previous error, but I still get this:

    Provider error '80004005'

    Unspecified error

    /search_fields.asp, line 113

    Code:
    sql = "SELECT Organization, [Program Name], tblDirectoryDatabase.[Street Address], tblDirectoryDatabase.[City 1], tblDirectoryDatabase.[Postal Code 1], tblDirectoryDatabase.[Phone 1], tblPrograms.[Phone 1], tblDirectoryDatabase.[Fax 1], tblDirectoryDatabase.[E-mail Address], tblDirectoryDatabase.[Internet Resources], tblDirectoryDatabase.[description], tblDirectoryDatabase.[keyword1] FROM tblDirectoryDatabase LEFT OUTER JOIN tblPrograms ON tblDirectoryDatabase.Id = tblPrograms.[Organization ID#] " & " WHERE [Program Name] LIKE '% " & u_input_clean & " %' OR " & u_field & " LIKE '% " & u_input_clean & " %' "
    What I have done:
    1. specify what I like to do with each field
    2. removed the extra % I had around the variables and made sure my " where in the right place
    3. Carefully placed the spaces
    4. made sure "s are in the right place

    As of now, I cant find my error again

    Spaz
    Just a little boy trying to make his way into the world...
    ~~~Spaz Boy
    Programmer + Gamer = ProGamer


Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •